nanomsg

Posted 太阳德生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nanomsg相关的知识,希望对你有一定的参考价值。

nanomsg是一个socket library,它提供了几种常见的通信模式,为了能使网络层快速、可扩展并且能易于使用。用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/iner.ipc";
 
typedef struct{
    int type;
    char text[1024];
}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 >= 0);
    assert (nn_bind (sock, url) >= 0);
    while (1)
    {
        int bytes = nn_recv (sock, &buf, NN_MSG, 0);
        assert (bytes >= 0);
        printf ("NODE0: RECEIVED %d \\"%s\\"\\n", buf->type, buf->text);
        nn_freemsg (buf);
    }
    return 1;
}

发送:

#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/iner.ipc";
 
typedef struct{
    int type;
    char text[1024];
}buf_t;
 
 
int main ()
{
    buf_t *buf = NULL;
    buf = (buf_t *)malloc(sizeof(buf_t));
    buf->type = 1;
    memset(buf->text,0,1024);
    memcpy(buf->text,"hello,world !",strlen("hello,world !"));
 
    int sz_msg = sizeof(buf_t);
    int sock = nn_socket (AF_SP, NN_PUSH);
    assert (sock >= 0);
    assert (nn_connect (sock, url) >= 0);
    printf ("NODE1: SENDING %d \\"%s\\"\\n", buf->type,buf->text);
    int bytes = nn_send (sock, buf, sz_msg, 0);
    assert (bytes == sz_msg);
    return nn_shutdown (sock, 0);
}

url可以自定义,但是也是有一点规则。

* 进程内通信(inproc):url格式为inproc://test
* 进程间同in想(ipc):url格式为ipc:///tmp/test.ipc
* tcp通信:url格式为tcp://*:6666

以上是关于nanomsg的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有 while 循环的情况下使用 nanomsg 调查架构?

用Python操作nanomsg(一)——准备

nanomsg 如何写数据到PipelineDB

nanomsg安装和测试

ubuntu 下安装nanomsg和nnpy

ZeroMQ/NanoMsg 发布/订阅与多播