网络通信 --> ZMQ安装和使用
ZMQ安装和使用
ZMQ 并不像是一个传统意义上的消息队列服务器,事实上,它也根本不是一个服务器,它更像是一个底层的网络通讯库,在 Socket API 之上做了一层封装,将网络通讯、进程通讯和线程通讯抽象为统一的 API 接口
跟 Socket 的区别是:普通的 socket 是端到端的(1:1的关系),而 ZMQ 却是可以N:M 的关系,人们对 BSD 套接字的了解较多的是点对点的连接,点对点连接需要显式地建立连接、销毁连接、选择协议(TCP/UDP)和处理错误等,而 ZMQ 屏蔽了这些细节,让你的网络编程更为简单。ZMQ 用于 node 与 node 间的通信,node 可以是主机或者是进程。
ZMQ 提供了三个基本的通信模型,分别是“Request-Reply “,”Publisher-Subscriber“,”Parallel Pipeline”,具体内容参见http://news.cnblogs.com/n/154000/
区别:
1、zmq套接字是异步的,可以实现特定模式
2、TCP是一对一,ZeroMQ是多对多的,可以根据套接字类型实现一对多,一对一,多对一,或多对多
3、ZeroMQ传输消息,TCP传输字节
4、ZeroMQ 隐藏IO细节,ZeroMQ不在乎目的是否存在
5、ZeroMQ可以往多个节点发送数据,可以从多个节点接收数据
一、安装
在ubuntu上安装并测试成功,过程见下:
(1)下载最新的ZeroMQ:http://download.zeromq.org/
(2)解压:tar -xvf zeromq-4.1.2.tar.gz
(3)编译
./configure 提示
checking for sodium... no
configure: error: Package requirements (libsodium) were not met
解决办法,暂时先屏蔽掉这个库:
./configure --prefix=/home/libdev/zmq --without-libsodium //红色部分路径可以去掉
make
make install
安装成功。
二、测试程序
server端:
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <assert.h>
#include <zmq.h> int main (void)
{
// Socket to talk to clients
void *context = zmq_ctx_new ();
void *responder = zmq_socket (context, ZMQ_REP);
int rc = zmq_bind (responder, "tcp://*:5555");
assert (rc == ); while () {
char buffer [];
zmq_recv (responder, buffer, , );
printf ("Received Hello\n");
sleep (); // Do some 'work'
zmq_send (responder, "World", , );
}
return ;
}
client端:
// Hello World client
#include <zmq.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h> int main (void)
{
printf ("Connecting to hello world server…\n"); /*创建一个新的上下文*/
void *context = zmq_ctx_new ();
void *requester = zmq_socket (context, ZMQ_REQ);
/*通过tcp协议,5555端口,连接本机服务端*/
zmq_connect (requester, "tcp://localhost:5555"); int request_nbr;
for (request_nbr = ; request_nbr != ; request_nbr++) {
char buffer [];
printf ("Sending Hello %d…\n", request_nbr);
zmq_send (requester, "Hello", , );
zmq_recv (requester, buffer, , );
printf ("Received World %d\n", request_nbr);
} zmq_close (requester);
zmq_ctx_destroy (context); return ;
}
编译:注意加上动态库
gcc hwserver_.c -o hwserver -lzmq
gcc hwclient_.c -o hwclient -lzmp
运行:出现如下错误
[root@localhost hwserver]# ./hwserver
./hwserver: error while loading shared libraries: libzmq.so.: cannot open shared object file: No such file or directory
解决办法:加上zmq.so的路径:
sudo find ./ -depth -name "libzmq.so" -print //找出动态库路径 cd /etc
sudo vim ld.so.conf //
include /usr/local/lib //把zmq.so的路径加进来
ldconfig //记住执行这句话
然后启动hwserver和hwclient,执行结果如下所示:


参考:http://www.cnblogs.com/Anker/p/4706244.html
网络通信 --> ZMQ安装和使用的更多相关文章
- windows如何安装python zmq
百度windows python zmq 安装,真的是佩服百度还能活到今天,搜到的结果是各种yum 安装,各种jmq怎么安装,更有甚者直接整源代码编译,忍无可忍,所以自己写下这一篇自己探索出来的安装方 ...
- Linux 上网络监控工具 ntopng 的安装
当今世界,人们的计算机都相互连接,互联互通.小到你的家庭局域网(LAN),大到最大的一个被我们称为互联网.当你管理一台联网的计算机时,你就是在管理最关键的组件之一.由于大多数开发出的应用程序都基于网络 ...
- Linux下zeromq.js安装
本文章主要阐述在离线环境下安装zeromq.js的方法和步骤.zeromq.js下载地址: https://www.npmjs.com/package/zeromq或者 https://github. ...
- ZeroMQ安装说明
ZeroMQ安装说明 1. 安装 1.1.Linux zmq安装 安装过程参考地址:http://zeromq.org/intro:get-the-software的说明 安装步骤如下(在安装时参 ...
- gozmq的安装与使用
1. 安装zmq 下载Windows版安装或linux版本并执行安装命令: tar zxvf zeromq-4.1.6.tar.gz cd zeromq-4.1.6 ./configure make ...
- ubuntu安装zeromq
官网地址:http://zeromq.org/ ubuntu下zmq安装 (1)下载:wget http://download.zeromq.org/zeromq-4.1.4.tar.gz (2)解压 ...
- Centos安装zeromq, jzmq
昨晚上帮LP一起在centos上安装zeromq.刚开始的时候,LP说在公司的机器装各种依赖包下不到,第一感觉安装起来还挺麻烦的. 然后上网搜索linux下zeromq的安装,然后先安装各种所需的依赖 ...
- ZeroMQ实例-使用ZeroMQ进行windows与linux之间的通信
1.本文包括 1)在windows下使用ZMQ 2)在windows环境下与Linux环境下进行网络通信 2.在Linux下使用ZMQ 之前写过一篇如何在Linux环境下使用ZMQ的文章 <Ze ...
- ZeroMQ 教程 001 : 基本概览
介绍性的话我这里就不翻译了, 总结起来就是zmq很cool, 你应该尝试一下. 如何安装与使用zmq 在Linux和Mac OS上, 请通过随机附带的包管理软件, 或者home brew安装zmq. ...
随机推荐
- UBOOT添加命令的执行流程
BootLoader(引导装载程序)是嵌入式系统软件开发的第一个环节,它把操作系统和硬件平台衔接在一起,对于嵌入式系统的后续软件开发十分重要,在整个开发中也占有相当大的比例.U-BOOT是当前比较流行 ...
- windows下python3.4安装lxml提示"Unable to find vcvarsall.bat"
"https://pypi.python.org/pypi/lxml/3.6.0"从这个网址直接下载对应的lxml包,exe格式的,直接安装,问题解决!
- dojo API中英文缩写的意思
dojo API中英文缩写的意思 1.A-Array(数组) 2.B-Boolean(布尔类型) 3.C-Constructor(构造器) 4.D-Date(日期) 5.{}-DomNode(节点) ...
- FusionCharts多数据验证饼图label是否重叠
昨天,有人问我一个问题:由于饼图的数据太多,label标签上的汉字过多,导致重叠,该怎么解决? 今天我用大量的数据,label标签的字符也很多,但是通过验证没有发现有重叠的情况啊! 1.验证的JSP页 ...
- Flex中获取RadioButtonGroup中的RadioButton的值
Flex中获取RadioButtonGroup中的RadioButton的值 1.设计源码 <?xml version="1.0" encoding="utf-8& ...
- Struts2实现文件上传(一)
Struts2实现文件上传 文件上传成功后结果页面 result.jsp: <%@ page language="java" import="java.util.* ...
- JustMock .NET单元测试利器(一)
1.什么是Mock? Mock一词是指模仿或者效仿,用于创建实例和静态模拟.安排和验证行为.在软件开发中提及"mock",通常理解为模拟对象.模拟对象的概念就是我们想要创建一个可以 ...
- Python基础__字符串拼接、格式化输出与复制
上一节介绍了序列的一些基本操作类型,这一节针对字符串的拼接.格式化输出以及复制的等做做详细介绍.一. 字符串的拼接 a = 'I', b = 'love', c = 'Python'. 我们的目的是: ...
- mac php 版本切换
注意:要求所有php版本都是由brew安装 一.使用brew安装php多版本方法 # brew install php56 # brew install php70 二.安装切换工具 # brew i ...
- Bounding-box 回归
R-CNN系列均训练了Bounding-box回归器来对窗口进行校正,其目标是学习一种转换关系将预测得到的窗口P映射为真实窗口G(Ground truth). 变换方式 可以通过简单的仿射变换以及指数 ...