ZeroMQ接口API解读(1) zmq_socket()

zmq_socket()

描述

本函数返回一个void*类型的句柄,用于引用这个socket,type参数则决定了该socket上消息队列的类型。

新建的socket是未绑定的,要使socket能够通讯,必须调用zmq_connect()与另一个端点建立连接或者调用zmq_bind()使其能够接受来自其它端点的连接。

传统的网络socket代表同步接口,而zmq socket则代表异步消息队列接口。网络socket传输子节流或数据报,zmq socket传输消息。

zmq的异步含义是连接建立和销毁,消息传输的时序都是由zmq自己完成的,与用户无关。如果对方无法接收,则发送端会将消息排序放入队列,而不是丢弃。

传统socket只允许一对一或多对一,但zmq socket允许发起多个连接,也允许多个端点连接自己,从而可以建立多对多的关系。

socket类型

socket类型是按照消息通讯模式来划分的。

请求-响应模式

本模式用于一个客户端向某个服务的一个或多个实例发起请求,并接收来自服务器的对每个请求的响应。

ZMQ_REQ

ZMQ_REQ socket用于客户端向服务器发送请求和接收来自服务的答复。此套接字类型,只允许一个zmq_send(请求)和随后zmq_recv(答复)的交替调用。如果有多个服务实例,则每个客户端请求发送和多个服务实例之间用轮转调度,每个收到的答复与最近发出的请求匹配。

当ZMQ_REQ socket连接的所有服务实例都进入高水位状态,或者当前没有服务实例可用,那么这个socket就进入异常状态,这个socket上所有的zmq_send()操作将会阻塞(放入队列但是不发送),直到异常状态结束或有可用的服务实例。消息不会被丢弃。


ZMQ_REQ socket特性
对方socket类型ZMQ_REP
方向双向
发送/接收模式Send, Receive, Send, Receive, …
发送调度策略Round-robin
到达路由策略Last peer
高水位处理阻塞

ZMQ_REP

ZMQ_REP socket是服务实例用于从客户端接收请求和向客户端发送响应的。这种socket类型只允许zmq_recv()和zmq_send()交替调用。每个接受到的请求是按照所有客户端内公平原则排队的。每个响应都会发送给最近一个发起请求的客户端。如果原始的请求客户端不存在,那么响应被丢弃。

当ZMQ_REP socket由于客户端的高水位原因进入异常状态时,所有发送到客户端的响应都会被丢弃,直到异常结束。

ZMQ_REP socket特性
对方socket类型ZMQ_REQ
方向双向
发送/接收模式Receive, Send, Receive, Send, …
接收调度策略Fair-queued
发送路由策略Last peer
高水位处理丢弃

ZMQ_DEALER
本类型的socket是一种用于扩展请求/响应模式的高级模式。每个消息按照round-robine方式发送,按照fair-queue方式接收。

当所有客户端都进入高水位状态或不存在客户端时,本socket进入异常状态。这时本socket上的任何zmq_send()调用都将阻塞,直到异常情况结束。消息不会丢弃。

When a ZMQ_DEALER socket is connected to a ZMQ_REP socket each message sent must consist of an empty message part, the delimiter, followed by one or more body parts.

当一个ZMQ_DEALER socket连接到一个ZMQ_REP socket时,每个发送的消息都必须由一个空消息,分隔符和一个或多个消息体组成。

ZMQ_DEALER特性
对端socket类型ZMQ_ROUTER, ZMQ_REQ, ZMQ_REP
方向双向
发送/接收模式不限
发送策略Round-robin
接收策略Fair-queued
高水位处理阻塞

ZMQ_ROUTER
本类型的socket是一种用于扩展请求/响应模式的高级模式。当接收消息时,在将消息传递给下一个环节时, ZMQ_ROUTER socket在消息的前面追加一个包含发送方标识的字段。 每个消息按照fair-queue方式接收。当发送消息时, ZMQ_ROUTER socket将移除消息的第一个部分,并用它决定消息要发送的目的地。如果目的地不存在,则消息被丢弃。

ZMQ_ROUTER socket达到高水位时,它将进入异常状态,这时所有发到这个socket的消息将被丢弃。同样,路由到一个不存在的对端或对端已经达到高水位时,消息将被丢弃。

当一个ZMQ_REQ连接到一个ZMQ_ROUTER socket时,每个收到的消息必须包含发送端的标识和一个分隔符。因此,收到的消息的结构是:一个或多个标识,分隔符,一个或多个消息体。当发送响应给ZMQ_REQ socket时,应用程序必须包含分隔符。

ZMQ_ROUTER特性
对端socketZMQ_DEALER, ZMQ_REQ, ZMQ_REP
方向双向
发送/接收模式不限
发送策略See text
接收策略Fair-queued
高水位处理丢弃

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值