udp-zeromq进程间的通信怎么使用?

问题描述

zeromq进程间的通信怎么使用?

我今天看了下zeromq,也用zeromq写了几个简单的例子,然后看了下它的介绍,发送支持好多通信协议,TCP、UDP、IPC
网上讲的例子都是讲TCP通信的,我想知道如果用来实现进程间的通信,这个要怎么用呢!

解决方案

client:
C/C++ code

#include
#include
#include
#include

int main ()
{

void *context = zmq_init (1); // Socket to talk to server

printf ("Connecting to hello world server...n");

void *requester = zmq_socket (context, ZMQ_DEALER);
//void *requester = zmq_socket (context, ZMQ_DEALER);

zmq_connect (requester, "ipc://pub");
//zmq_connect (requester, "tcp://localhost:5555");

int request_nbr;

while(1)
{

zmq_msg_t request;

zmq_msg_init_data (&request, "Hello", 6, NULL, NULL);

printf ("Sending request %d...n", request_nbr);

zmq_send (requester, &request, 0);

zmq_msg_close (&request);
sleep(1);

/*zmq_msg_t reply;

zmq_msg_init (&reply);

zmq_recv (requester, &reply, 0);

printf ("Received reply %d: [%s]n", request_nbr, (char *) zmq_msg_data (&reply));

zmq_msg_close (&reply); */
}

zmq_close (requester);

zmq_term (context);

return 0;
}

client1:
C/C++ code

#include
#include
#include
#include

int main ()
{

void *context1 = zmq_init (1); // Socket to talk to server

printf ("Connecting to hello world server...n");

//void *requester = zmq_socket (context, ZMQ_REQ);

void *requester1 = zmq_socket (context1, ZMQ_DEALER);

//zmq_connect (requester1, "tcp://localhost:5556");

zmq_connect (requester1, "ipc://pub");

int request_nbr;

while(1)
{

/*zmq_msg_t request;

zmq_msg_init_data (&request, "wjl", 8, NULL, NULL);

printf ("Sending request %d...n", request_nbr);

zmq_send (requester1, &request, 0);

zmq_msg_close (&request);

sleep(1); */

zmq_msg_t reply;

zmq_msg_init (&reply);

zmq_recv (requester1, &reply, 0);

printf ("Received reply %d: [%s]n", request_nbr, (char *)
zmq_msg_data (&reply));

zmq_msg_close (&reply);

}

zmq_close (requester1);

zmq_term (context1);

return 0;
}

server:
C/C++ code

#include
#include
#include
#include
#include

int main ()
{

// Prepare our context and socket

zmq::context_t context (1);
zmq::socket_t socket (context, ZMQ_DEALER);
//void *responder = zmq_socket (context, ZMQ_DEALER);
// zmq_bind(responder, "ipc://pub");

socket.bind ("ipc://pub");
//socket.bind ("ipc://pub1");
//socket.bind("tcp://*:5555");
//socket.bind("tcp://*:5556");

while (true)
{

zmq::message_t request; // Wait for next request from client

socket.recv (&request);

printf ("Received request: [%s]n", (char *) request.data ()); // Do some 'work'

//sleep (1); // Send reply back to client

//zmq::message_t reply (8);

// memcpy ((void *) reply.data (), (char *) request.data (), 8);

socket.send (request);
}
/*while (1) {
// Wait for next request from client
zmq_msg_t request;
zmq_msg_init (&request);
zmq_recv (responder, &request, 0);
printf ("Received Hellon");
zmq_msg_close (&request);

    //  Do some 'work'
    sleep (1);

    //  Send reply back to client
    zmq_msg_t reply;
    zmq_msg_init_size (&reply, 5);
    memcpy (zmq_msg_data (&reply), "World", 5);
    zmq_send (responder, &reply, 0);
    zmq_msg_close (&reply);
}
//  We never get here but if we did, this would be how we end
zmq_close (responder);
zmq_term (context);*/

return 0;
}

解决方案二:

实现一个进程的多个线程内的对象消息共享,可以通过PUBSUB方式处理。nanomsg不错,可以多看看。

时间: 2024-09-09 11:24:27

udp-zeromq进程间的通信怎么使用?的相关文章

线程及 进程间的通信问题! .

一个很好的编程随想的博客http://program-think.blogspot.com/2009/03/producer-consumer-pattern-0-overview.html 架构设计:生产者/消费者模式[0]:概述  1.如何确定数据单元2.队列缓冲区3.环形缓冲区4.双缓冲区 生产 消费 2010-06-01 10:13   #include <boost/thread/thread.hpp> #include <boost/thread/mutex.hpp>

由一道面试题来了解进程间的通信

    周末面试碰到一个面试题,题目是: 在MMO游戏中,服务器采用Linux操作系统,网络通信与游戏逻辑处理进程一般是分离的.例如:GameSvr进程处理游戏逻辑,TCPSvr进程处理网络通信.Linux操作系统提供了很多机制可以实现GameSvr和TCPSvr进程之间的数据通信.请您列出两种你认为最好的机制来,并为主(最好)次(次佳)描述他们实现的框架,优缺点对比和应用中的注意事项. 答案:Linux下进程通信 一.进程间通信概述进程通信有如下一些目的:A.数据传输:一个进程需要将它的数据发

UNIX系统管理:系统调用-进程间高级通信

基本上所有的系统调用成功时返回0或正数,失败时返回负值. 消息通信 每个消息队列都有一个msqid_ds类型的控制结构,该结构中包括对消息队列的访问权限,其数据结构如下: struct msqid_ds { struct ipc_perm msg_perm; /*操作权限结构 */ struct msg msg_first; /*指向消息队列的第一个结构*/ struct msg msg_last; /*指向消息队列的最后一个结构*/ ushort msg_cbytes; /*队列中当前字节数*

window中进程间如何通信

一个间接办法,你可用一个"共享名"申请一块共享内存块,进行读写: HANDLE GetShare(char * &ShareP,int size,char *ShareName){//ShareP申请的内存块地址,size字节数,ShareName共享名HANDLE fh=CreateFileMapping((HANDLE)-1,0,PAGE_READWRITE,0,Size,ShareName);ShareP=(char *)MapViewOfFile(fh,FILE_MAP

Linux进程间通讯-IPC详解

linux下的进程通信手段基本上是从Unix平台上的进程通信手段继承而来的.而对Unix发展做出重大贡献的两大主力AT&T的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间通信方面的侧重点有所不同.前者对Unix早期的进程间通信手段进行了系统的改进和扩充,形成了"system V IPC",通信进程局限在单个计算机内:后者则跳过了该限制,形成了基于套接口(socket)的进程间通信机制.Linux则把两者继承了下来,如图示: 其中,最初Unix IPC包括:

谁知道java管道进程间怎么调用?注意是进程间!!

问题描述 谁知道java管道进程间怎么调用?注意是进程间!! 谁知道java管道进程间怎么调用?注意是进程间!!不要有c程序出现,只要java的,谢谢!!!! 解决方案 我也想知道111111 解决方案二: 进程间的通信:管道进程间的通信:管道

Linux 基于IPC机制实现进程间的共享内存处理

今天学习了相关于IPC(InterProcess Communication ,进程间通信)的相关知识.就做个笔记,一来让大家检查一下我的理解方面是不是有错误,二来也为了能让更多的博友们了解到相关的知识吧. IPC的种类 IPC 的种类,一般来说下面两种使用的较多: - 共享"内存" - 消息传递 下来我们就分别的介绍一下相关的信息吧. 共享内存 字面意思的理解是采用共享一块计算机中的内存空间来实现的进程之间的通信的一种方式.也就是说这块内存区域驻留在生成共享内存段进程的地址空间.(是

Android Studio创建AIDL文件并实现进程间通讯实例

在Android系统中,跨进程通信是非常普遍的事情,它用到了Binder机制处理进程之间的交互.Binder机制会开放一些接口给Java层,供android开发工程师调用进程之间通信.这些接口android封装到了AIDL文件里,当我们项目用到跨进程通信时可以创建.aidl文件,.aidl文件可以协助我们达到跨进程的通信.下面简单介绍用AndroidStudio创建AIDL文件的过程. a.新建AIDL文件 1.项目文件夹右键---> new --->选择AIDL 2.自定义一个接口名称 3.

NetBSD进程间通讯系统分析

简单的进程间通讯: 管道 管道是 UNIX 最传统, 最简单, 也是最有效的进程间通讯方法. NetBSD 处理管道的代码在 kern/sys_pipe.c, 它的读写函数作为 file 结构的 fileops 挂载, 并在 read(2), write(2) 时被调用. 管道创建 pipe(2) 的响应函数实 sys_pipe(). 它首先两次调用 pipe_create(), 第一次申请读端口将调用 pipespace() 申请一个用作缓冲区的内核地址空间 (回忆 BsdSrcUvm, su