最近做的东西,用到了zmq的问答模式,使用起来跟普通的socket十分类似。下面从一个基本的例子,扩展到超时判断,再扩展到多线程处理。
基本的例子
下面的程序看起来就和普通socket一样,但zmq做了很多,例如消息不丢失,无论先启动server还是client,都是可以的,普通socket是做不到的。还有保持长链接,失败重试,很多很多.
最大的不同,在REP与REQ模式下,server和client天然是1对多的,在普通的socket中,服务器要能应对多个client,最简单也要在循环中,对每一个请求开一个线程。
server
|
|
client
|
|
其他协议
除了tcp协议,还包括ipc协议和inproc协议,ipc在同一个物理机器上,可以实现进程通信,inproc是在内存中。
超时判断
client在send之后,recv接受服务器端回发的信息,如果服务器崩溃,没有返回,则client会一直阻塞着,即使server重启也没法响应,如果希望client等待有超时重连机制,下面这个例子稍加改造就能使用了。
server
|
|
和刚才基本一样,不过server每次收到信息,就会挂起5秒。
client
希望能够client发出信息后,3秒不返回,就不等待了。
多线程
上面的例子,因为服务执行过程缓慢,所以链接的客户端都阻塞在那里了。如果希望服务执行的代码是多线程并行的,可以借助zmq的路由和device机制。
server
|
|
client
|
|
多开几个client,感受一下!