Node.js 设置为{packet,4}并使用NodeJS的OTP gen_tcp的奇怪行为;帧流'';用于TCP通信

Node.js 设置为{packet,4}并使用NodeJS的OTP gen_tcp的奇怪行为;帧流'';用于TCP通信,node.js,tcp,erlang,otp,gen-tcp,Node.js,Tcp,Erlang,Otp,Gen Tcp,为了在NodeJS服务器和erlang gen_tcp服务器之间正确地构建消息,我已经努力了一段时间。我一直在成功地使用{packet,line},直到我不得不发送大数据消息并需要切换到消息大小帧 我将gen_tcp设置为{packet,2} 我使用的图书馆来自: 对于NodeJS tcp解码端。它也被设置为数据包大小选项2 我已经尝试了数据包大小选项4 我看到任何长度小于127个字符的消息,此设置工作正常,但任何长度超过此设置的消息都有问题 我运行了一个测试,从gen_tcp发送越来越长的消

为了在NodeJS服务器和erlang gen_tcp服务器之间正确地构建消息,我已经努力了一段时间。我一直在成功地使用{packet,line},直到我不得不发送大数据消息并需要切换到消息大小帧

我将gen_tcp设置为{packet,2}

我使用的图书馆来自: 对于NodeJS tcp解码端。它也被设置为数据包大小选项2 我已经尝试了数据包大小选项4

我看到任何长度小于127个字符的消息,此设置工作正常,但任何长度超过此设置的消息都有问题

我运行了一个测试,从gen_tcp发送越来越长的消息,然后读取在NodeJS端接收到的前四个字节:

关于电文127: 标题:0 127 帧长127

关于消息128:
HEADER:00239我想出来了,这个问题是由于将套接字设置为在UTF-8编码上接收而引起的,UTF-8编码最多支持127个ascii码

不要这样做:socket.setEncoding('utf8')

现在看起来很明显,但很难发现一行代码

[00][7e][...]  (126 length)
[00][7f][...]  (127 length)
[00][80][...]  (128 length)
[00][81][...]  (129 length)