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的主要内容,如果未能解决你的问题,请参考以下文章