1、应用手册

https://github.com/nanomsg/nanomsg

  1. % mkdir build
  2. % cd build
  3. % cmake ..
  4. % cmake --build .
  5. % ctest .
  6. % sudo cmake --build . --target install
  7. % 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)的更多相关文章

  1. GitHub 如何基於 Node.js 和 Chromium 開發 Atom?

    看到回答里, 多数都没有回答到点子上, 还有些给了非常主观的意见而没有给出实际结论和分析过程. 题主的问题有四个: 1. Github 如何基于 Node.js 和 Chromium 开发 Atom? ...

  2. linux ipc/its

    linux进程间双向消息队列 server.c #include <stdio.h> #include <stdlib.h> #include <string.h> ...

  3. c++消息中间件

    ZeroMQ ActiveMQ-CPP 另外 ZeroMQ 的作者用 C 重构了一套.改名叫:nanomsg ZeroMQ:https://www.cnblogs.com/rainbowzc/p/33 ...

  4. 消息队列性能对比——ActiveMQ、RabbitMQ与ZeroMQ(译文)

    Dissecting Message Queues 概述: 我花了一些时间解剖各种库执行分布式消息.在这个分析中,我看了几个不同的方面,包括API特性,易于部署和维护,以及性能质量..消息队列已经被分 ...

  5. Writing custom protocol for nanomsg

    http://vitiy.info/writing-custom-protocol-for-nanomsg/ nanomsg is next version of ZeroMQ lib, provid ...

  6. ubuntu 下安装nanomsg和nnpy

    nanomsg nanomsg是ZeroMQ作者用C语言重写的一个Socket库,其用法和模式和ZeroMQ差不多,但是具有更好的性能和更完善的接口. 首先下载源码 wget https://gith ...

  7. nanomsg安装和测试

    最近在构建一个中间层的通信架构,本来想用dbus,在实验过程中发现dbus对于国产系统支持版本比较低,安装比较麻烦,今天无意中看中了nanomsg,尽管没有dbus那么强悍的生态,但基本能满足需求. ...

  8. ZeroMQ:云时代极速消息通信库

    ZeroMQ:云时代极速消息通信库(大规模|可扩展|低成本|高效率解决之道,大规模分布式|多线程应用程序|消息传递架构构建利器) [美]Pieter Hintjens(皮特.亨特金斯)著   卢涛 李 ...

  9. 以ZeroMQ谈消息中间件的设计【译文】

    本文主要是探究学习比较流行的一款消息层是如何设计与实现的 ØMQ是一种消息传递系统,或者乐意的话可以称它为"面向消息的中间件".它在金融服务,游戏开发,嵌入式系统,学术研究和航空航 ...

随机推荐

  1. Android基础总结(六)Activity

    创建第二个Activity(掌握) 需要在清单文件中为其配置一个activity标签 标签中如果带有这个子节点,则会在系统中多创建一个快捷图标 <intent-filter> <ac ...

  2. js学习笔记22----BOM属性和方法

    BOM基本概念 : Browser Object Model 浏览器对象模型. BOM属性: window.navigator.userAgent : 浏览器信息 判断是否是某个浏览器,可以用 ind ...

  3. JavaScript实现网页安全登录(转)

    现在很多商业网站的用户登录都是明码传输的,而一般用户又习惯于所有帐号使用相同的密码来保存,甚至很多人使用的密码和自己的银行帐号都一样哦!所 以嘛还是有一定的安全隐患的,YAHOO的免费邮箱登录使用了M ...

  4. JVM与外界通过数据通道进行数据交换

    使用I/O流访问file中的内容. JVM与外界通过数据通道进行数据交换. 分类: 按流分为输入流和输出流: 按传输单位分为字节流和字符流: 还可以分为节点流和过滤流. 节点流:负责数据源和程序之间建 ...

  5. typecho篇

    百度百科的介绍: Typecho是由type和echo两个词合成的,来自于开发团队的头脑风暴. Typecho基于PHP5开发,支持多种数据库,是一款内核强健﹑扩展 方便﹑体验友好﹑运行流畅的轻量级开 ...

  6. Frameset 两页面互调控件技术案例

    总共包含三个页面(Html),分别为Parent.Html.ChildA.Html.ChildB.Html Parent.Html页面代码 <frameset cols="50%,*& ...

  7. UNMET PEER DEPENDENCY @angular/common@2.3.1

    install of angular-cli results in unmeet peer dependencies. OSX 10.11.6node v6.9.1npm v3.10.8 [sudo] ...

  8. Lumen Carbon 日期及时间处理包

    用到过的方法: 获取当前Y-m-d H:i:s Carbon::now()->toDateTimeString() 把 Y-m-d H:i:s 转 Y-m-d Carbon::parse('Y- ...

  9. 自定义View中的Path

    我们用Path可以画返回图标,可以画搜索图标,也可以画一个圆,DIDI

  10. 将工程导入到SVN仓库

    1.在桌面右键点开Tortoise客户端 2.选择仓库 3.在仓库的trunk目录下为新工程创建文件夹