当前位置:首页 > CN2资讯 > 正文内容

zmq代理类

2天前CN2资讯


一 需求:

将zmq 常用模式进行封装

二 代码:

#ifndef SRC_ZMQ_AGENT_HPP_
#define SRC_ZMQ_AGENT_HPP_
#include <string.h>
#include <string>
#include <map>
#include "zmq.h"
namespace zmq_self_agent {
using namespace std;
enum {
BIND,
CONNECT
};
enum {
NO_ERROR,
CONTEXT_ERROR,
SOCKET_ERROR,
SOCKET_TYPE_ERROR,
BIND_ERROR,
CONNECT_ERROR,
SOCKET_ATTRIBUTE_ERROR
};
class zmq_config {
public:
zmq_config() {
sock_type = 0;
addr = nullptr;
send_hwm = 1000;
recv_hwm = 1000;
send_timeout = 5;
}
public:
unsigned char sock_type;
const char *addr;
int send_hwm;
int recv_hwm;
int send_timeout;
};
class zmq_agent {
public:
zmq_agent() {
context_ = nullptr;
socket_ = nullptr;
init_map();
}
virtual ~zmq_agent() {
if (nullptr != socket_) {
zmq_close(socket_);
socket_= nullptr;
}
if (nullptr != context_) {
zmq_ctx_destroy(context_);
context_ = nullptr;
}
}
public:
unsigned char init(const zmq_config &config) {
unsigned char ret = init_socket(config);
if (ret) {
return ret;
}
ret = init_link(config);
if (ret) {
return ret;
}
ret = init_sock_attribute(config);
return ret;
}
int send(const char *info, int len)
{
zmq_msg_t msg = {0};
int rc = zmq_msg_init_size(&msg, len);
if (rc) {
return 0;
}
memcpy(zmq_msg_data(&msg), info, len);
rc = zmq_msg_send(&msg, socket_, 0);
zmq_msg_close(&msg);
return rc;
}
bool recv(string &recv_str) {
zmq_msg_t msg = {0};
int rc = zmq_msg_init(&msg);
if (rc) {
return false;
}
int len = zmq_msg_recv(&msg, socket_, 0);
bool succ = false;
if (len > 0) {
recv_str.assign((char *)zmq_msg_data(&msg), len);
succ = true;
}
zmq_msg_close(&msg);
return succ;
}
private:
inline void init_map() {
sock_type_map_[ZMQ_PULL] = BIND;
sock_type_map_[ZMQ_PUB] = BIND;

sock_type_map_[ZMQ_PUSH] = CONNECT;
sock_type_map_[ZMQ_SUB] = CONNECT;
}
inline unsigned char init_socket(const zmq_config &config) {
if (nullptr == (context_ = zmq_ctx_new())) {
return CONTEXT_ERROR;
}
if (nullptr == (socket_ = zmq_socket(context_, config.sock_type))) {
return SOCKET_ERROR;
}
return NO_ERROR;
}
unsigned char init_link(const zmq_config &config) {
auto it = sock_type_map_.find(config.sock_type);
if (end(sock_type_map_) == it) {
return SOCKET_TYPE_ERROR;
}
unsigned char ret = 0;
if (BIND == it->second) {
ret = zmq_bind(socket_, config.addr);
if (ret) {
return BIND_ERROR;
}
return NO_ERROR;
}
ret = zmq_connect(socket_, config.addr);
if (ret) {
return CONNECT_ERROR;
}
return NO_ERROR;
}
inline unsigned char init_sock_attribute(const zmq_config &config) {
unsigned char ret = zmq_setsockopt(socket_, ZMQ_SNDHWM, &config.send_hwm, sizeof(config.send_hwm));
if (ret) {
return SOCKET_ATTRIBUTE_ERROR;
}
ret = zmq_setsockopt(socket_, ZMQ_RCVHWM, &config.recv_hwm, sizeof(config.recv_hwm));
if (ret) {
return SOCKET_ATTRIBUTE_ERROR;
}
ret = zmq_setsockopt(socket_, ZMQ_SNDTIMEO, &config.send_timeout, sizeof(config.send_timeout));
if (ret) {
return SOCKET_ATTRIBUTE_ERROR;
}
return NO_ERROR;
}
private:
void *context_;
void *socket_;
private:
map<unsigned char, unsigned char>sock_type_map_;
};
}

#endif /* SRC_ZMQ_AGENT_HPP_ */

 

    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/24639.html

    分享给朋友:

    “zmq代理类” 的相关文章

    如何在VPS上轻松部署和管理Telegram机器人 | 详细指南

    1.1 创建Telegram机器人 在Telegram上创建一个机器人非常简单。我们只需要与@BotFather进行对话。@BotFather是Telegram官方提供的机器人管理工具,专门用于创建和管理机器人。通过发送/newbot命令,我们可以开始创建自己的机器人。@BotFather会引导我们...

    Windows SSH Client安装与配置指南

    在Windows 10版本1809及以后的版本中,微软引入了OpenSSH客户端,这让很多用户的远程管理变得更为便捷。作为一个IT爱好者,我发现这个特性非常有用,它让我能够轻松地通过SSH协议安全地连接和管理远程服务器。接下来,我将分享一些Windows SSH客户端的安装和配置过程,方便大家快速上...

    深入了解CN2 GIA VPS:选择更快稳定的虚拟专用服务器

    在现代互联网环境中,选择合适的虚拟专用服务器(VPS)至关重要。CN2 GIA VPS,则是个不错的选择。它基于中国电信的CN2 GIA国际精品网络,这一网络是中国电信下一代承载网络的高端产品,又被称为Chinatelecom Next Carrier Network- Global Interne...

    Rackdog:高性价比的独立服务器租赁和托管解决方案

    Rackdog是一家充满活力的基础设施即服务(IaaS)提供商,成立于2020年。作为互联网时代的重要角色,Rackdog专注于独立服务器出租和托管业务,拥有一系列丰富的服务。通过自己的设备和网络架构,Rackdog正在为客户提供优质的托管解决方案。 Rackdog的AS号是AS398465,拥有多...

    咸鱼云:高性价比VPS服务解决您的在线需求

    咸鱼云概述 在互联网服务日益发展的今天,咸鱼云(SaltyFish)作为一家新兴的主机商家,自2019年成立以来,逐渐在市场中占据了一席之地。它的出现让许多寻找高性价比VPS服务的用户有了新的选择。咸鱼云专注于基于KVM架构的国外VPS服务,凭借较为稳定的性能和实惠的价格,吸引了不少追求性价比的客户...

    AMD Ryzen VPS 性能测评:RackNerd 的优越体验与机房对比

    当我开始使用RackNerd的VPS服务时,我被它的低价和强大性能所吸引。作为一个刚入驻云计算的用户,我知道许多商家提供VPS,但RackNerd以十美元每年的超低价格引起了我的注意。而真正让我印象深刻的是它的稳定性与出色的售后服务。我曾多次遇到技术问题,售后支持总能在第一时间给我回应,这让我感受到...