nanomsg(ZeroMQ with C)
1、应用手册
https://github.com/nanomsg/nanomsg
% mkdir build
% cd build
% cmake ..
% cmake --build .
% ctest .
% sudo cmake --build . --target install
% sudo ldconfig
(if on Linux)
2、性能测试
dong@ubuntu:~/nanomsg-1.1.4/build$ ctest .
Test project /home/dong/nanomsg-1.1.4/build
Start 1: inproc
1/43 Test #1: inproc ........................... Passed 0.51 sec
Start 2: inproc_shutdown
2/43 Test #2: inproc_shutdown .................. Passed 0.26 sec
Start 3: ipc
3/43 Test #3: ipc .............................. Passed 0.71 sec
Start 4: ipc_shutdown
4/43 Test #4: ipc_shutdown ..................... Passed 1.07 sec
Start 5: ipc_stress
5/43 Test #5: ipc_stress ....................... Passed 1.52 sec
Start 6: tcp
6/43 Test #6: tcp .............................. Passed 0.65 sec
Start 7: tcp_shutdown
7/43 Test #7: tcp_shutdown ..................... Passed 2.72 sec
Start 8: ws
8/43 Test #8: ws ............................... Passed 1.73 sec
Start 9: pair
9/43 Test #9: pair ............................. Passed 0.00 sec
Start 10: pubsub
10/43 Test #10: pubsub ........................... Passed 0.12 sec
Start 11: reqrep
11/43 Test #11: reqrep ........................... Passed 0.11 sec
Start 12: pipeline
12/43 Test #12: pipeline ......................... Passed 0.02 sec
Start 13: survey
13/43 Test #13: survey ........................... Passed 1.01 sec
Start 14: bus
14/43 Test #14: bus .............................. Passed 0.01 sec
Start 15: async_shutdown
15/43 Test #15: async_shutdown ................... Passed 2.02 sec
Start 16: block
16/43 Test #16: block ............................ Passed 0.21 sec
Start 17: term
17/43 Test #17: term ............................. Passed 0.11 sec
Start 18: timeo
18/43 Test #18: timeo ............................ Passed 0.21 sec
Start 19: iovec
19/43 Test #19: iovec ............................ Passed 0.00 sec
Start 20: msg
20/43 Test #20: msg .............................. Passed 0.03 sec
Start 21: prio
21/43 Test #21: prio ............................. Passed 0.11 sec
Start 22: poll
22/43 Test #22: poll ............................. Passed 0.15 sec
Start 23: device
23/43 Test #23: device ........................... Passed 0.21 sec
Start 24: device4
24/43 Test #24: device4 .......................... Passed 0.11 sec
Start 25: device5
25/43 Test #25: device5 .......................... Passed 0.11 sec
Start 26: device6
26/43 Test #26: device6 .......................... Passed 1.01 sec
Start 27: device7
27/43 Test #27: device7 .......................... Passed 1.01 sec
Start 28: emfile
28/43 Test #28: emfile ........................... Passed 0.05 sec
Start 29: domain
29/43 Test #29: domain ........................... Passed 0.00 sec
Start 30: trie
30/43 Test #30: trie ............................. Passed 0.00 sec
Start 31: list
31/43 Test #31: list ............................. Passed 0.00 sec
Start 32: hash
32/43 Test #32: hash ............................. Passed 0.02 sec
Start 33: stats
33/43 Test #33: stats ............................ Passed 0.51 sec
Start 34: symbol
34/43 Test #34: symbol ........................... Passed 0.00 sec
Start 35: separation
35/43 Test #35: separation ....................... Passed 0.41 sec
Start 36: zerocopy
36/43 Test #36: zerocopy ......................... Passed 0.00 sec
Start 37: shutdown
37/43 Test #37: shutdown ......................... Passed 0.01 sec
Start 38: cmsg
38/43 Test #38: cmsg ............................. Passed 0.01 sec
Start 39: bug328
39/43 Test #39: bug328 ........................... Passed 0.41 sec
Start 40: bug777
40/43 Test #40: bug777 ........................... Passed 0.00 sec
Start 41: ws_async_shutdown
41/43 Test #41: ws_async_shutdown ................ Passed 1.08 sec
Start 42: reqttl
42/43 Test #42: reqttl ........................... Passed 0.21 sec
Start 43: surveyttl
43/43 Test #43: surveyttl ........................ Passed 0.21 sec
100% tests passed, 0 tests failed out of 43
Total Test time (real) = 18.70 sec
dong@ubuntu:~/nanomsg-1.1.4/build$
3、demo
recv.c
#include <stdio.h>
#include<stdlib.h>
#include<string.h>
#include <assert.h>
#include <nanomsg/nn.h>
#include <nanomsg/reqrep.h>
#include <nanomsg/pubsub.h>
#include <nanomsg/pipeline.h> const char *url = "ipc:///tmp/pipeline.ipc"; typedef struct{
int type;
char text[];
}buf_t; int main ()
{
buf_t *buf = NULL;
buf = (buf_t *)malloc(sizeof(buf_t)); int sock = nn_socket (AF_SP, NN_PULL);
assert (sock >= );
assert (nn_bind (sock, url) >= );
while ()
{
int bytes = nn_recv (sock, &buf, NN_MSG, );
assert (bytes >= );
printf ("NODE0: RECEIVED %d \"%s\"\n", buf->type, buf->text);
nn_freemsg (buf);
}
return ;
}
send.c
#include <stdio.h>
#include<stdlib.h>
#include<string.h>
#include <assert.h>
#include <nanomsg/nn.h>
#include <nanomsg/reqrep.h>
#include <nanomsg/pubsub.h>
#include <nanomsg/pipeline.h> const char *url = "ipc:///tmp/pipeline.ipc"; typedef struct{
int type;
char text[];
}buf_t; int main ()
{
buf_t *buf = NULL;
buf = (buf_t *)malloc(sizeof(buf_t));
buf->type = ;
memset(buf->text,,);
memcpy(buf->text,"hello,world !",strlen("hello,world !")); int sz_msg = sizeof(buf_t);
int sock = nn_socket (AF_SP, NN_PUSH);
assert (sock >= );
assert (nn_connect (sock, url) >= );
printf ("NODE1: SENDING %d \"%s\"\n", buf->type,buf->text);
int bytes = nn_send (sock, buf, sz_msg, );
assert (bytes == sz_msg);
return nn_shutdown (sock, );
}
编译运行
dong@ubuntu:~/nanomsg_demo$ gcc -o recv recv.c -lnanomsg
dong@ubuntu:~/nanomsg_demo$ ./recv
NODE0: RECEIVED 1 "hello,world !"
NODE0: RECEIVED 1 "hello,world !"
NODE0: RECEIVED 1 "hello,world !"
dong@ubuntu:~/nanomsg_demo$ gcc -o send send.c -lnanomsg
dong@ubuntu:~/nanomsg_demo$ ./send
NODE1: SENDING 1 "hello,world !"
dong@ubuntu:~/nanomsg_demo$ ./send
NODE1: SENDING 1 "hello,world !"
dong@ubuntu:~/nanomsg_demo$ ./send
NODE1: SENDING 1 "hello,world !"
dong@ubuntu:~/nanomsg_demo$
* 进程内通信(inproc):url格式为inproc://test
* 进程间同in想(ipc):url格式为ipc:///tmp/test.ipc
* tcp通信:url格式为tcp://*:5555
4、python 与 c 进程通信
server.c
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <nanomsg/pair.h>
#include <nanomsg/bus.h>
#include <nanomsg/nn.h> char *url = "ipc://test"; int server_sock_init(int *sock)
{
*sock = nn_socket (AF_SP, NN_PAIR);
if (*sock < ) {
printf("create server sock failed\r\n");
return ;
}
if (nn_bind(*sock, url) < ) {
printf("bind server sock failed\r\n");
return ;
}
printf("server socket init success...\r\n");
return ;
} int main()
{
int s_sock;
char *tx_msg = "Hi, client !";
char *rx_msg = NULL; if ( != server_sock_init(&s_sock)) {
return;
}
while ()
{
int result = nn_recv(s_sock, &rx_msg, NN_MSG,NN_DONTWAIT);
if (result > ) {
printf("server Recieve: %s\r\n", rx_msg);
nn_freemsg (rx_msg);
} size_t len = strlen (tx_msg) + ;
if (nn_send(s_sock, tx_msg, len, ) < ) {
printf("server Send Msg Failed\r\n");
nn_freemsg (tx_msg);
} sleep();
} return ;
}
client.py
# -*- coding:utf-8 -*-
from __future__ import print_function
from nanomsg import Socket, PAIR, PUB
import time
s1 = Socket(PAIR)
s1.bind('ipc://test')
while True:
s1.send(b'hi, server !')
print(s1.recv())
time.sleep(1)
#s1.close()
编译
gcc -o server server.c -lnanomsg
gcc -o client client.c -lnanomsg
export LD_LIBRARY_PATH=$(pwd)/nanomsg-1.1.5/build:$LD_LIBRARY_PATH
https://files.cnblogs.com/files/dong1/nanomsg_demo.tar.gz
参考设计
nanomsg通信库的pubsub及survey
https://yq.aliyun.com/ziliao/829
https://yq.aliyun.com/articles/8694
https://www.oschina.net/code/snippet_1444806_49921
https://nanomsg.org/v0.1/nn_recv.3.html
1)Getting Started with nanomsg
https://blog.csdn.net/zsy19881226/article/details/56486176
2)This is a sample for p2p network based nanomsg
https://github.com/pch957/nanomsg_p2pnode
nanomsg(ZeroMQ with C)的更多相关文章
- GitHub 如何基於 Node.js 和 Chromium 開發 Atom?
看到回答里, 多数都没有回答到点子上, 还有些给了非常主观的意见而没有给出实际结论和分析过程. 题主的问题有四个: 1. Github 如何基于 Node.js 和 Chromium 开发 Atom? ...
- linux ipc/its
linux进程间双向消息队列 server.c #include <stdio.h> #include <stdlib.h> #include <string.h> ...
- c++消息中间件
ZeroMQ ActiveMQ-CPP 另外 ZeroMQ 的作者用 C 重构了一套.改名叫:nanomsg ZeroMQ:https://www.cnblogs.com/rainbowzc/p/33 ...
- 消息队列性能对比——ActiveMQ、RabbitMQ与ZeroMQ(译文)
Dissecting Message Queues 概述: 我花了一些时间解剖各种库执行分布式消息.在这个分析中,我看了几个不同的方面,包括API特性,易于部署和维护,以及性能质量..消息队列已经被分 ...
- Writing custom protocol for nanomsg
http://vitiy.info/writing-custom-protocol-for-nanomsg/ nanomsg is next version of ZeroMQ lib, provid ...
- ubuntu 下安装nanomsg和nnpy
nanomsg nanomsg是ZeroMQ作者用C语言重写的一个Socket库,其用法和模式和ZeroMQ差不多,但是具有更好的性能和更完善的接口. 首先下载源码 wget https://gith ...
- nanomsg安装和测试
最近在构建一个中间层的通信架构,本来想用dbus,在实验过程中发现dbus对于国产系统支持版本比较低,安装比较麻烦,今天无意中看中了nanomsg,尽管没有dbus那么强悍的生态,但基本能满足需求. ...
- ZeroMQ:云时代极速消息通信库
ZeroMQ:云时代极速消息通信库(大规模|可扩展|低成本|高效率解决之道,大规模分布式|多线程应用程序|消息传递架构构建利器) [美]Pieter Hintjens(皮特.亨特金斯)著 卢涛 李 ...
- 以ZeroMQ谈消息中间件的设计【译文】
本文主要是探究学习比较流行的一款消息层是如何设计与实现的 ØMQ是一种消息传递系统,或者乐意的话可以称它为"面向消息的中间件".它在金融服务,游戏开发,嵌入式系统,学术研究和航空航 ...
随机推荐
- 工作中Hadoop,Spark,Phoenix,Impala 集群中遇到坑及解决方案
1.HDFS 修复 问题描述:其他部门在yarn平台上跑spark 程序错误的生成了海量的不到100K的小文件,导致namenode压力过大,其中一个namenode宕机后,没有及时发现 使得edit ...
- Java解析json(二):jackson
Java解析json(二):jackson 官方参考 Jackson Home Page:https://github.com/FasterXML/jackson Jackson Wiki:htt ...
- HeadFirst jsp 08 无脚本JSP
web页面设计人员真的必须懂 java ? web页面人员可以很快学习 EL 语言. 目前不知道 EL 应用前景如何, 但是我们香港系统没有使用 EL. include 指令 include指令告诉容 ...
- asp.net 判断session是否过期
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
- python中的字典 和 集合
python中字典是一种key-value的数据类型 字典的特性: 1.无序的 2.key必须的唯一的,so,字典天生去重 语法: 增加 修改 删除 查找 多级字典嵌套及操作 字典的其他用法 #set ...
- could not find com.android.support.appcompat-v7:23.4.0
导入别人的工程到AS中,出现错误,是由于android studio的版本比所加载的工程所使用的版本低,有些包不是最新的. 我的android studio这个包的版本是 v7:23.1.1 所以需要 ...
- 小结:双连通分量 & 强连通分量 & 割点 & 割边
概要: 各种dfs时间戳..全是tarjan(或加上他的小伙伴)无限膜拜tarjan orzzzzzzzzz 技巧及注意: 强连通分量是有向图,双连通分量是无向图. 强连通分量找环时的决策和双连通的决 ...
- Virtual Box下安装Oracle Linux 6.3
Oracle Linux 6.3已经公布快2年了,其功能有非常大的提升,增强了KVM,文件卷的在线resizing,LVM支持 raid4, 5, 6.支持很多其它的虚拟CPU数以及更大内存,详细能够 ...
- PHP时间戳 strtotime()使用方法和技巧
在php中我想要获取时间戳有多种方法,最常用的就是使用time函数与strtotime()函数把日期转换成时间戳了, 下面我来给大家分享一下时间戳函数 strtotime用法. 获取指定的年月日转化为 ...
- 利用flume+kafka+storm+mysql构建大数据实时系统
架构图