ZeroMQ初步学习

今天先来编译一下ZeroMQ的示例程序。

首先要先安装zeromq,使用默认的选项./configure, make, make install。

然后是zeromq的server的示例代码
  1. #include <zmq.hpp>
  2. #include <string>
  3. #include <iostream>
  4. #include <unistd.h>

  5. int main () {
  6.     // Prepare our context and socket
  7.     zmq::context_t context (1);
  8.     zmq::socket_t socket (context, ZMQ_REP);
  9.     socket.bind ("tcp://*:5555");

  10.     while (true) {
  11.         zmq::message_t request;

  12.         // Wait for next request from client
  13.         socket.recv (&request);
  14.         std::cout << "Received Hello" << std::endl;

  15.         // Do some 'work'
  16.         sleep (1);

  17.         // Send reply back to client
  18.         zmq::message_t reply (5);
  19.         memcpy ((void *) reply.data (), "World", 5);
  20.         socket.send (reply);
  21.     }
  22.     return 0;
  23. }
编译:
  1. g++ --Wall -fPIC -I../../include -I../../utils -shared -c server.cpp -o server.o
  2. cc -L../../lib --lstdc++ -lzmq -o server server.o
在编译的时候,如果找不到zmq库,别忘了把安装路径加入到/etc/ld.so.conf中,并执行ldconfig。

下面是client的示例程序
  1. //
  2. // Hello World client
  3. // Connects REQ socket to tcp://localhost:5555
  4. // Sends "Hello" to server, expects "World" back
  5. //
  6. #include <zmq.h>
  7. #include <string.h>
  8. #include <stdio.h>
  9. #include <unistd.h>

  10. int main (void)
  11. {
  12.     void *context = zmq_init (1);

  13.     // Socket to talk to server
  14.     printf ("Connecting to hello world server…\n");
  15.     void *requester = zmq_socket (context, ZMQ_REQ);
  16.     zmq_connect (requester, "tcp://localhost:5555");

  17.     int request_nbr;
  18.     for (request_nbr = 0; request_nbr != 10; request_nbr++) {
  19.         zmq_msg_t request;
  20.         zmq_msg_init_size (&request, 5);
  21.         memcpy (zmq_msg_data (&request), "Hello", 5);
  22.         printf ("Sending Hello %d…\n", request_nbr);
  23.         zmq_send (requester, &request, 0);
  24.         zmq_msg_close (&request);

  25.         zmq_msg_t reply;
  26.         zmq_msg_init (&reply);
  27.         zmq_recv (requester, &reply, 0);
  28.         printf ("Received World %d\n", request_nbr);
  29.         zmq_msg_close (&reply);
  30.     }
  31.     zmq_close (requester);
  32.     zmq_term (context);
  33.     return 0;
  34. }
编译:
  1. g++ --Wall -fPIC -I../../include -I../../utils -shared -c client.cpp -o client.o
  2. cc -L../../lib --lstdc++ -lzmq -o client client.o

下面运行一下:
  1. [xxx@xxx-vm-fc13 client]$ ./client
  2. Connecting to hello world server…
  3. Sending Hello 0…
  4. Received World 0
  5. Sending Hello 1…
  6. Received World 1
  7. Sending Hello 2…
  8. Received World 2
  9. Sending Hello 3…
  10. Received World 3
  11. Sending Hello 4…
  12. Received World 4
  13. Sending Hello 5…
  14. ^C
  15. [xxx@xxx-vm-fc13 client]$
  1. [xxx@xxx-vm-fc13 server]$ ./server
  2. Received Hello
  3. Received Hello
  4. Received Hello
  5. Received Hello
  6. Received Hello
  7. Received Hello
  8. ^C
  9. [xxx@xxx-vm-fc13 server]$

虽然使用的是示例程序,但是从代码上看,使用zeromq确实比直接使用socket要简单方便的多。更何况据说还高效。

今天只是简单的试用zeromq,以后就慢慢开始深入了。

参考: http://zguide.zeromq.org/page:all

你可能感兴趣的:(ZeroMQ)