今天先来编译一下ZeroMQ的示例程序。
首先要先安装zeromq,使用默认的选项./configure, make, make install。
然后是zeromq的server的示例代码
-
#include <zmq.hpp>
-
#include <string>
-
#include <iostream>
-
#include <unistd.h>
-
-
int main () {
-
// Prepare our context and socket
-
zmq::context_t context (1);
-
zmq::socket_t socket (context, ZMQ_REP);
-
socket.bind ("tcp://*:5555");
-
-
while (true) {
-
zmq::message_t request;
-
-
// Wait for next request
from client
-
socket.recv (&request);
-
std::cout << "Received
Hello" << std::endl;
-
-
// Do some ‘work‘
-
sleep (1);
-
-
// Send reply back to client
-
zmq::message_t reply (5);
-
memcpy ((void *) reply.data (), "World", 5);
-
socket.send (reply);
-
}
-
return 0;
-
}
编译:
-
g++ -g -Wall -fPIC -I../../include -I../../utils -shared -c
server.cpp -o server.o
-
cc -L../../lib -g -lstdc++ -lzmq -o
server server.o
在编译的时候,如果找不到zmq库,别忘了把安装路径加入到/etc/ld.so.conf中,并执行ldconfig。
下面是client的示例程序
-
//
-
// Hello World client
-
// Connects REQ socket to tcp://localhost:5555
-
// Sends "Hello" to server, expects "World" back
-
//
-
#include <zmq.h>
-
#include <string.h>
-
#include <stdio.h>
-
#include <unistd.h>
-
-
int main (void)
-
{
-
void *context = zmq_init (1);
-
-
// Socket to talk to server
-
printf ("Connecting to hello world server…\n");
-
void *requester = zmq_socket (context, ZMQ_REQ);
-
zmq_connect (requester, "tcp://localhost:5555");
-
-
int request_nbr;
-
for (request_nbr = 0; request_nbr != 10; request_nbr++) {
-
zmq_msg_t request;
-
zmq_msg_init_size (&request, 5);
-
memcpy (zmq_msg_data (&request), "Hello", 5);
-
printf ("Sending Hello %d…\n", request_nbr);
-
zmq_send (requester, &request, 0);
-
zmq_msg_close (&request);
-
-
zmq_msg_t reply;
-
zmq_msg_init (&reply);
-
zmq_recv (requester, &reply, 0);
-
printf ("Received World %d\n", request_nbr);
-
zmq_msg_close (&reply);
-
}
-
zmq_close (requester);
-
zmq_term (context);
-
return 0;
-
}
编译:
-
g++ -g -Wall -fPIC -I../../include -I../../utils -shared -c
client.cpp -o client.o
-
cc -L../../lib -g -lstdc++ -lzmq -o
client client.o
下面运行一下:
-
[xxx@xxx-vm-fc13 client]$ ./client
-
Connecting to hello world server…
-
Sending Hello 0…
-
Received World 0
-
Sending Hello 1…
-
Received World 1
-
Sending Hello 2…
-
Received World 2
-
Sending Hello 3…
-
Received World 3
-
Sending Hello 4…
-
Received World 4
-
Sending Hello 5…
-
^C
-
[xxx@xxx-vm-fc13 client]$
-
[xxx@xxx-vm-fc13 server]$ ./server
-
Received Hello
-
Received Hello
-
Received Hello
-
Received Hello
-
Received Hello
-
Received Hello
-
^C
-
[xxx@xxx-vm-fc13 server]$
虽然使用的是示例程序,但是从代码上看,使用zeromq确实比直接使用socket要简单方便的多。更何况据说还高效。
今天只是简单的试用zeromq,以后就慢慢开始深入了。
ZeroMQ初步学习
原文:http://blog.csdn.net/nyist327/article/details/44837601