// 非线程安全
zmq_socket
void* zmq_socket(void* context, int type);
该API 会根据context , type 创建一个不透明的套接字句柄. 并且是没有初始化连接的
也没有和任何端口联系在一起,如果是客户端,这时就需要用zmq_connect 去连接到服务器
如果是服务器,需要去用zmq_bind API去绑定端口.
与传统套接字不同的是 ,传统套接字不是流协议,就是报文协议
而zmq 的套接字提出了 异步消息队列,并且伴随着准确的队列语义, 前面的实现依赖于
type,也就是不同的使用套接字类型
而ZMQ传输的是无保障的消息
context : 可以从 zmq_ctx_new() apI 获取
type: 表示的是你需要创建的是何种套接字类型
type:
请求-应答模型(ZMQ-REQ)
该模型是被用作 从一个 客户端发送请求到一个或者是多个服务器,然后服务器对每个请求做出请求.
如果没有服务器存在,客户端会组则, 直到有一个服务器变成可用状态为止,其服务器操作是 zmq_recv, zmq_send.即交替使用,很适合用于http服务器.
对于客户端来说,需要先send, 再 recv
exqmple:
#include
#include
extern "C"
{
#include
}
#pragma comment(lib,"libzmq_d.lib")
#define buffersize 4096
int main(int argc, char* argv[])
{
void * ctx = zmq_ctx_new();
void* server = zmq_socket(ctx, ZMQ_REQ);
zmq_connect(server, "tcp://localhost:5050");
char* buffer[256] = { 0 };
int ret = 0;
char* str = "我是客户端.....";
while (true)
{
memset(buffer, 0, 256);
zmq_send(server, str, strlen(str), 0);
zmq_recv(server, buffer, 256, 0);
printf("%s\n", buffer);
}
system("pause");
zmq_close(server);
zmq_ctx_destroy(ctx);
return 0;
}
ZMQ_REP模式
该模型用于 服务器 去接受请求, 并对接受的请求做出相应的套接字模式 , 即先 recv, 再 send
example :
#include
#include
extern "C"
{
#include
}
#pragma comment(lib,"libzmq_d.lib")
#define buffersize 4096
int main(int argc, char* argv[])
{
void * ctx = zmq_ctx_new();
void* server = zmq_socket(ctx, ZMQ_REQ);
zmq_connect(server, "tcp://localhost:5050");
char* buffer[256] = { 0 };
int ret = 0;
char* str = "我是客户端.....";
while (true)
{
memset(buffer, 0, 256);
zmq_send(server, str, strlen(str), 0);
zmq_recv(server, buffer, 256, 0);
printf("%s\n", buffer);
}
system("pause");
zmq_close(server);
zmq_ctx_destroy(ctx);
return 0;
}