我正在调试多线程node.js示例之间的IPC实现。由于数据报套接字本身不受支持,我使用默认的流协议,并进行简单的应用程序级打包。当两个线程通信时,服务器端总是在接收,客户端总是在发送。
第一个
我的流在传输包中编码,然后解码回来,数据JSON字符串化来回。
现在所发生的是,有时,因为它似乎更频繁地在更高的CPU负载,incoming_buffer得到一些随机字符,显示为“"时,记录.
即使这种情况在10000次传输中只发生一次,这也是一个问题。我需要一个可靠的方法,即使CPU负载达到最大,流也不应该有意外的字符,也不应该被损坏。
什么可能导致这种情况?实施这种情况的正确方法是什么?
1条答案
按热度按时间cwtwac6a1#
好的,我找到了。节点文档给出了提示。
必须用来代替
incoming_buffer += data.toString();
setEncoding()方法为从Readable流读取的数据设置字符编码。
默认情况下,不分配编码,流数据将作为Buffer对象返回。设置编码将导致流数据作为指定编码的字符串而不是Buffer对象返回。例如,调用readable.setEncoding('utf8')将导致输出数据被解释为UTF-8数据,并作为字符串传递。调用readable.setEncoding('hex')将导致以十六进制字符串格式对数据进行编码。
Readable流将正确处理通过流传递的多字节字符,否则,如果只是将这些字符作为Buffer对象从流中提取出来,这些字符将无法正确解码。
因此,它主要取决于压力测试中多字节字符的数量,然后是CPU负载。