性能测试不适用于nanomsg(总线)

时间:2017-02-04 13:54:31

标签: c performance bus nanomsg

我想使用 nanomsg 作为总线系统。所以我尝试编写性能测试代码并使用两台PC进行测试。

起初我写了一个服务器,它连接到另一台服务器:

#include <nanomsg/nn.h>
#include <nanomsg/bus.h>
#include <string.h>
#include <stdio.h>
#include <assert.h>

int main(int argc, char *argv[]) {
  if (argc == 2) {
    int socket = nn_socket (AF_SP_RAW, NN_BUS);
    assert(nn_bind (socket, "tcp://*:27384") != -1);
    assert(nn_connect (socket, argv[1]) != -1);

    assert(nn_device(socket, -1) != -1);

    nn_close(socket);
  }
}

在我的情况下,我将这些命令运行为:

  

在第一台PC上:./server tcp://192.168.1.11:27384

     

在第二台PC上:
./server tcp://192.168.1.241:27384

他们是连接的,为了证明这一点,我使用 nanocat 并将其本地连接到服务器:

  

在第一台PC上:
  nanocat --bus --connect tcp://127.0.0.1:27384 --data foo --interval 1 --ascii

     

在第二台PC上:
  nanocat --bus --connect tcp://127.0.0.1:27384 --data bar --interval 1 --ascii

在第一台电脑上,我每秒钟都收到一个“酒吧”,第二台电脑上收到一个'foo',也是每秒钟。

所以我现在写了接收器。

#include <nanomsg/nn.h>
#include <nanomsg/bus.h>
#include <string.h>
#include <stdio.h>
#include <assert.h>

int main(int argc, char *argv[]) {
  int socket = nn_socket (AF_SP, NN_BUS);
  assert(nn_connect (socket, "tcp://127.0.0.1:27384") != -1);

  sleep(1);

  unsigned char buffer[4096];

  while(1) {
    int n = nn_recv(socket, buffer, 4096, 0);

    if (n > 0) {
      nn_send(socket, buffer, strlen(buffer), 0);
    }
  }

  nn_close(socket);
}

收到一条消息并将其发回。

然后我写了发件人:

#include <nanomsg/nn.h>
#include <nanomsg/bus.h>
#include <stdio.h>
#include <unistd.h>
#include <time.h>
#include <string.h>

#define NANO_PER_SEC 1000000000.0

int main(int argc, char *argv[]) {
  int socket = nn_socket (AF_SP, NN_BUS);
  nn_connect (socket, "tcp://127.0.0.1:27384");

  sleep(1);

  unsigned char buffer[4096];

  int i = 0;
  for (i = 0; i < 1024; i++) {
    buffer[i] = 'a';
  }
  buffer[i] = '\0';

  struct timespec start, end;
  double start_sec, end_sec, elapsed_sec;
  double average;

  double m[4096];

  for (i = 0; i < 4096; i++) {
    clock_gettime(CLOCK_REALTIME, &start);

    int ns = nn_send(socket, buffer, strlen(buffer), 0);
    int nr = nn_recv(socket, buffer, 4096, 0);

    clock_gettime(CLOCK_REALTIME, &end);
    start_sec = start.tv_sec + start.tv_nsec/NANO_PER_SEC;
    end_sec = end.tv_sec + end.tv_nsec/NANO_PER_SEC;
    m[i] = end_sec - start_sec;
  }

  elapsed_sec = 0.0;
  for (i = 0; i < 4096; i++) {
    elapsed_sec = elapsed_sec + m[i];
  }
  average = (elapsed_sec / 4096.0) * 1000000.0;
  printf("Average: %.3f micros\nWhole: %.12f seconds\n", average, elapsed_sec);

  nn_close(socket);
}

发送方向接收方发送4096次1kbyte并测量时间, 所以我得到了整个时间和平均时间。

首先,我在本地只在一台PC上测试了三个打开的​​bash终端。

  

第一个终端:
./server tcp://192.168.1.11:27384   
  第二终端:
./receiver
  
  第三终端:
./sender

所以,我从“发送者”程序得到了这个输出:

Average: 60.386 micros
Whole: 0.247341632843 seconds

然后我试着运行它:

  

在第一台PC上:
  ./server tcp://192.168.1.11:27384
  ./receiver

     

在第二台PC上:
  ./server tcp://192.168.1.241:27384
  ./sender

但它停滞不前,运行“接收器”的第一台PC没有收到来自第二台PC的任何消息,后者运行“发送方”。我不知道它有什么不对,因为 nanocat 它运行正常。

有人可以帮帮我吗?

0 个答案:

没有答案