4、zmq使用经验分享.pptxVIP

  • 37
  • 0
  • 约1.57千字
  • 约 15页
  • 2016-11-27 发布于河南
  • 举报
4、zmq使用经验分享

zmq应用经验分享讲师:陈永顺2013年1月23号目 录一总体介绍二常用模式的特点介绍及演示实践中的问题三四待探讨的问题一、总体介绍guide: /http/:////page:allapi manual: /http/:///一个开源的通讯库,高效,支持多种语言只专注和解决了消息通讯这一基本问题不必在意启动顺序关注的是通讯双方的职责提供四种通讯模式一对一结对通讯 (ZMQ_PAIR)请求回应模型发布订阅模型管道模型高性能应用简单 // push客户端 zmq::socket_t socket_(context, ZMQ_PUSH); socket_.connect(g_address_.c_str()); std::string str_msg(message produce by push_client.); while (true) { zmq::message_t send_msg(str_msg.size()); memcpy(send_msg.data(), str_msg.c_str(), str_msg.size()); socket_.send(send_msg); SLEEP_T(g_send_interval_milisec); }应用简单// pull 服务端void startReceive(zmq::context_t context){ zmq::socket_t socket_(context, ZMQ_PULL); socket_.bind(g_address_.c_str()); while (true) { zmq::message_t received_msg; socket_.recv(received_msg); } socket_.close();}配对使用的模式PUB and SUBPUSH and PULLDEALER and ROUTERREQ and REPREQ and ROUTERDEALER and REPPAIR and PAIRDEALER and DEALERROUTER and ROUTER二、常用模式的特点介绍及演示PUB/SUBPUSH/PULLRouter/Dealerpub/sub的特性客户端未连接,消息是否丢弃接收端处理不过来,消息如何处理服务端网络异常,恢复后是否重连,期间消息是否丢弃客户端网络异常,恢复后是否重连,期间消息是否丢弃pUSH/PULL的特性客户端未连接,消息是否丢弃接收端处理不过来,消息如何处理服务端网络异常,恢复后是否重连,期间消息是否丢弃客户端网络异常,恢复后是否重连,期间消息是否丢弃ROUTER/DEALER的特性客户端未连接,消息是否丢弃接收端处理不过来,消息如何处理服务端网络异常,恢复后是否重连,期间消息是否丢弃客户端网络异常,恢复后是否重连,期间消息是否丢弃三、实践中的问题为进程创建一个context,传送给所有线程 (in-proc需要使用相同contex)不允许在线程间共享套接字(套接字的线程使用这个套接字)避免使用同步控制,如互斥/信号量/临界区,应该使用zmq消息发布订阅不能重连dealer的重复identity导致的大量time_wait连接达到高水位时,pub丢掉数据,其它则阻塞 四、待继续探讨的问题sub端处理能力不足,缓存占用问题dealer异常关闭后identity占用问题内存有限时,可以把数据buffer放在磁盘上 感谢! 100M带宽,push/dealer/sub 5万消息,170byte(网络带宽极限)任何一端都可bind演示效果演示效果演示效果多个相同dealer,貌似支持热备份?演示dealer重复identity问题高可靠性模式?

文档评论(0)

1亿VIP精品文档

相关文档