使用TCP

时间:2016-01-21 08:20:17

标签: http tcp server zeromq

我正在尝试制作一个简单的服务器。

我限制使用的语言是c ++。

我正在使用ZeroMQ

我创建了一个简单的服务器和一个客户端,就像文档一样。

ZeroMQ使用 TCP 代替HTTP

我知道HTTP的基础层是TCP,因此我想知道使用TCP代替HTTP会有任何性能问题。

对于HTTP我可以使用 curl 来测试应用程序。

我应该使用TCPcurl命令向带有字符串参数的套接字发送请求)。

服务器:

#include <zmq.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <assert.h>

int main (void)
{                                                  // Socket to talk to clients
   void *context = zmq_ctx_new ();
   void *responder = zmq_socket (context, ZMQ_REP);
   int rc = zmq_bind (responder, "tcp://*:5555");
   assert (rc == 0);

   while (1)
   {
      char buffer [10];
      zmq_recv (responder, buffer, 10, 0);
      printf ("Received Hello\n");

                                                   // trying to send json object
      zmq_send (responder, "World", 5, 0);
   // zmq_send (responder, "World", 5, 0);
      sleep (1);                                   // Do some 'work'
   }
   return 0;
}

客户端:

// 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_ctx_new ();
                                                   // 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_msg_send (&request, requester, 0);
       zmq_msg_close (&request);
       zmq_msg_t reply;

       zmq_msg_init (&reply);
       zmq_msg_recv (&reply, requester, 0);
       printf ("Received World %d\n", request_nbr);
       zmq_msg_close (&reply);
   }
   zmq_close (requester);
   zmq_ctx_destroy (context);
   return 0;
}

1 个答案:

答案 0 :(得分:0)

Q1:使用TCP代替HTTP会有任何性能问题吗? A1:是的,它会。性能和延迟都将受益于避免HTTP - 丰富的数据重新包装

Q2: TCP我应该使用什么来向具有字符串参数的套接字发送请求?
A2:没有命令(curl命令)会对您有所帮助。 ZeroMQ 使用某些行代码(假设它是communicationg对等体之间的简单协议),因此独立的命令行工具将无法匹配行代码要求 - -架。 解决方案?创建一个简单的c程序,它将使用cmd-line参数(字符串,作为示例)并组装一个ZeroMQ层兼容的数据框架,以便与远程对等体通信。您还应注意,要使ZeroMQ REQ/REP 正式沟通模式生效,此代理工具必须成为唯一的 REQ < / strong>,resp。 REP 实体在前进锁定的diadic-communication关系中,因此也提供了等待的响应, REQ -side期待在 REP -side收到消息后收到。