在好例子网,分享、交流、成长!
您当前所在位置:首页Others 开发实例一般编程问题 → zeromq中文指导手册

zeromq中文指导手册

一般编程问题

下载此实例
  • 开发语言:Others
  • 实例大小:1.37M
  • 下载次数:16
  • 浏览次数:107
  • 发布时间:2021-02-17
  • 实例类别:一般编程问题
  • 发 布 人:好学IT男
  • 文件格式:.pdf
  • 所需积分:2
 

实例介绍

【实例简介】
zeromq的中文指导手册,欢迎下载,全文230页,相对英文版缺少最后第六章社区部分,不影响学习使用。
“ World”应答 / Hello World server / Binds rep socket to tcp: /*: 5555 / Expects llello from client, replies with World #include zmg h #include <stdio. h> #include < unistd. h> #include <string. h) int main void **context zmg init (1) Socket to talk to clients void *responder= zmg socket (context, ZMQ REP emg bind (responder,tcp: //* 5555) while(1i / Wait for next request from client ∠q_msg_ t reguest; zmg msg init (&request) zmg recv (responder, &request, 0) printf Received request: [%s]\n (char *)zmq msg data( &request)) zmg msg close (&request // Do some work leep (1) / Send reply back to client zmg msg t reply zmg msg init size (&reply, 6) memcpy ((void * zmg msg data (&reply),"World, 6) zmq send (responder &reply, 0) zmg msg close(&reply) zmg term(context) eturn o Client REQ Hello World REP Server Figure 1 Request-Reply 套接字对REQ-REP是步伐一致的。客户机调用ZMQ发送函数,然后调用函数 7 mq scnd(3),然后调用函数 Zmq recv(3)这是一个循环(或者如果需要的话只调用一次) 使用别的任何序列(如在一行发送两个消息)都会出错。类似的,服务器按照先调用函数 emg recv(3),然后调用函数 emg send(3)的顺序,调用次数根据需要而定。 0MQ使用C语言作为参考语言,并且我们也用C语言作为例子。如果你是在线入读本 文,这个例子卜面的链接将会帮你转换为别的程序语言。让我们用C++编写的相同的服务 器程序作为对比。 / Hello World server in C++ / Binds REP socket to tcp: //:5555 / Expects Hello from client, replies with World #include <zmg hpp> #include unistd. h> #include < stdio. h) #include string. h> t main / Prepare our context and socket emg:: context t context (1) zmg: socket t socket (context, ZMQ REP) socket bind( tcp: //* 5555") while (true) zmq:: message t request; / Wait for next request from client socket recv (&request) printf( Received request: [%s]\n (char *)request data O // Do some'’work sleep (1) / Send reply back to client emg:: message t reply (6) memcpy ((void * reply data O, World, 6) socket send (reply) return 0: 你可以看到在C语言或者C艹语言中使用的MQ套接字很相像。像 pathon这样的语 言,我们甚至可以隐藏更多,读起米更简单。 这个是C语言的客户机代码(单击源程序西面的链接,或者转换成你最喜欢的程序语 / Hello World client / Connects REQ socket to tcp: //localhost: 5555 / Sends Hello to server, expects World" back #include 'zmg h> #include <string. h> #include <stdio. h #include <unistd. h> nt main o i void *context= zmq init (1) Socket to talk to server printf connecting to hello world server..\ n") void requester - zmg socket (context, ZMQ REQ emg connect (requester,tcp: //localhost: 5555) int request nbr for (request nbr =0 request nbr ! =10; request nbr++) ∠ ng nsg_ t reques t zmg msg init data (&request,Hello", 6, NULL, NULL printf (" Sending request %d.. \n", request nbr) zmg send (requester, &request, 0) zmq msg close (reques emg msg t reply zmg msg init (&reply) zmg recv (requester, &reply, 0 printf Received reply %d: L%s]\n", request nbr (char *)zmg msg data (&reply) zmg msg close (&reply) zmg close (requester. zmg term (context) return o 这个看起来简单得不现实。但是,一个0MQ套接字就是当你把一个通用的TCP套接 字,注入从苏维埃秘密核研究项目偷来的混合的放射性同位素,用上世纪50年代的宇宙射 线轰炸它,再把它放在一个有膨胀的肌肉凸出在弹性合成纤维里的拙劣伪装成神物的,脑 袋被药弄坏了的漫画书作者的手里得到的。0MQ套接字是拯救网络世界的超级英雄。 Zap! TCP socket OMQ socket BOOM! POW! Illegal radioisotopes from secret Soviet atomic Spandex city Cosmic rays Figure 2 A terrible accident 次让儿「个客户机向服务器发送请求,它也可以工作的很好,很快。试着玩玩,先打廾 客户机,再打开服务器,看看它是怎么继续工作的,想一下这意味着什么 让我简单的解释一下这两个程序实际上在干什么他们创建了0MQ工作的环境,和套接字。 不要担心不懂这些词语的意思。你慢慢会明白的。服务器在端口5555绑定它的REP(应答) 服务器等待一个请求,在一个循环中,它每次都会用一个应答来响应。客户机发送一个请求并 且读取来自服务器的应答。 在幕后发生∫很多事,但是我们程序员关心的是代码是否简短和令人满意,甚全在重 荷下它是否也不会经常崩溃掉。这是请求应答模型,可能是0Q中最简单的模型。它主 要用于远程过程调用和典型的客户-服务器模式 关于字符串的小小的注意事项 除了宇节的大小外,OMQ对你发送的数据一无所知。这就意味着你有责任对它进行安 全的格式化,以便应用程序能够读回它。对象和复杂数据类型的安全格式化有专门的库比 如协议缓冲区来完成。但是,即使是字符串,你也应该小心。 在C语言或者一些其它语言,字符串是以一个空字节结尾的,在 Hello world的例了中 可以看到,我们把字符串和空字节一起发送。 zmg msg init data (&request, Hello", 6, NULL, NULL) 但是,如果你用另外一种语言发送数据,它可能不需要包括最后的空宇节。例如,当 我们用 Pathon语言来发送相同的字符串。我们用下面的语句: socket send(Hello") 在线路上传输的是: e Figure 3 A oMQ string 如果你从C语言程序读到的,你可能会获得像字符串的东西,可能碰巧表现的像个字 符串(很幸运,这五个字节后面恰好跟着一个空字节),但它不是一个正确的宇符串。 这就意味着,如果你混合使用C语言和另外·种语言来编写 Hello world的客户机服务 器程序,你很可能会得到奇怪的结果。事实上,我希望你得到奇怪的结果,因为这样会帮 助你理解这部分。 如果你接收到一个来自0MQ的字符串,是用C语言编写的,你不能轻易相信它是正确 结尾的。每次收到一个字符串,你都需要分配一个新的有多余字节空间的缓冲区,复制这 个字符串,并以一个空字符结尾。 因此,我们制定了规则,0MQ宇符串是定长的,在线路上发送不会尾随着一个空字 节。最简单的情况(在我们的例子中,我们将会做这件事)一个0MQ字符串对应一个0MQ 消息结构,如上图所示,包括长度和一些字节。 这个程序描述的是我们接收来自OMQ的字符串,并且把它作为一个有用的字符串传送 给应用程序的过程,使用的是C语言。 application as a valid c string / Receive oMQ string from socket and convert into c string static char米 s recv (void *socket)I zmg msg t message zmg msg init (&message) zmg recv (socket, &message, 0 int size zmq msg size(&message) char *string= malloc (size 1) memcpy (string, zmg msg data( &message), size zmg msg close (&message); tring [size]=0 return (string); 这是一个很方便的帮助函数,它是本着有利于再利用的精神。我们编写一个相似的 s send'数来以正确的形式发送字符肀,并把它打包到我们能够重复利用的头文件中ε 下血就是 helpers.h文件,它让我们能够用C语言编写令人喜欢的,简短的 应用程序。 水 helpers. h Helper header file for example applications Copyright(c)1991-2010imAtixCorporation<www.imatix.com> Copyright other contributors as noted in the AUTHORS file ThisfileispartofthezeRo.mqGuide:http://zguide.zeromg.org This is free software; you can redistribute it and/ or modify it under the terms of the GNU Lesser general Public license as pub shed by the Free Software Foundation; either version 3 of the License, or (at your option) any later version This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABIL itY or fitness for a particular purpose sce the gnu lesser general Public license for more details You should have received a copy of the GNU Lesser general Public License alongwiththisprogramIfnotsee<http://www.gnuorg/licenses/>. 半 #ifndef ZHELPERS H INCLUdED #define ZHELPERS I INCLUded / Include a bunch of headers that we will need in the examples #include <zmg h> #include pthread. h> #include <stdint. h #include < stdio. h> #include < stdlib. h> #include <stdarg. h> #include string. h> #include <sys/time. h> #include <time,h> #include unistd. h> #include <assert. h> / Bring Windows MSVC up to c99 scratch #if ( defined( WINDOWS ) typedef unsigned long ulong typedef unsigned int uint typedef int64 int64t #endif / Provide random number from 0.(num-1) #define within(num)(int)((float)(num)* random (/(RAND MAX +1.0)) / Receive oMQ string from socket and convert into c string / Caller must free returned string static char* s recv (void *socket)I zmg msg t message: emg msg init (&message) if(zmg recv(socket, &message, 0)) exit (1) // Context terminated, exit int size= zmq msg size ( &message) char *string= malloc (size 1) memcpy (string, zmg msg data( &message), size zmg msg close (&message); string [size]=0; return (string) / Convert c string to OMQ string and send to socket static int s send (void *socket, char *) int rc emg msg t message zmg msg init size (&message, strlen (string) mlemepy(zing msg data &message), string, strlen (string)) rc=zmq send (socket, &message, 0) assert (rc) emg msg close (&message return (rc) Sends string as omQ string, as multipart non terminal static int s sendmore(void米 socket,char米 string) int rc omg msg t message zmg msg init size (&message, strlen (string)) memcpy (zmg msg data( &message), string, strlen (string)) rc= zmq send (socket, &message, ZMQ SNDMORE) zmg msg close (&message assert (rc) return (rc) // Receives all message parts from socket, prints neatly static void s dump (void *socket) puts while(1)t / Process all parts of the message ∠qⅢ sg t message; 【实例截图】
【核心代码】

标签:

实例下载地址

zeromq中文指导手册

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警