节点JSON套接字vs TCP套接字上的protobuf

时间:2016-03-29 13:10:45

标签: json node.js sockets tcp protocol-buffers

我一直在努力研究如何在不同机器上的两个节点进程之间进行最佳通信。

我在多个客户端和一台服务器之间建立了TCP连接。这些客户端将保持套接字打开,因为它们将永久发送数据,我希望避免在打开/关闭套接字时浪费时间。

我开始使用JSON-Socket,但表演非常糟糕,所以我开始修改它以通过不同方式改善它的表现:

  1. 使用int little endian声明编码的JSON的大小。
  2. 通过64536字节缓冲消息(单独它们实际上很小〜每个项目发送100个字符),然后将它们写入网络套接字,以避免发送过多的网络成本小包。
  3. 接收块时,我将每个项目放在一个缓冲区字符串中,然后解析一个项目数组,以避免在解析多个小项目时浪费时间(参见JSPerf
  4. 迭代项目数组并通过process.nextTick(.. socket.emit('item', item) ..)触发此数组中每个项目的事件,以避免调用堆栈错误。
  5. 但我的感觉是它非常低效。所以我在考虑使用protobuf对字符串进行字符串化/解析(Node prtofobuf perf),保持我的TCP管道打开以避免重新连接,并且仍然在每个项目通过管道发送之前使用intLE表示法来解析它并在其上发出它另一端。但我真的不确定最好的方法,或者有更好的事件?

    总结我想要实现的目标:

    X客户 ~110个字符的项目发送到 1个服务器。服务器需要单独处理每个项目并确认将每个项目都考虑在内。

0 个答案:

没有答案