我已经实现了使用TCP套接字进行通信的客户机/服务器。我写入套接字的数据是字符串化的JSON。然而,最初一切都按预期工作,随着我提高写入速度,我最终遇到了JSON解析错误,其中客户端的开始部分在旧部分的末尾处接收到新写入的开始。从Node.js中的TCP套接字读取字符串时出现问题
这里是服务器代码:
var data = {};
data.type = 'req';
data.id = 1;
data.size = 2;
var string = JSON.stringify(data);
client.write(string, callback());
这里是我如何在客户端服务器上接收到该代码:
client.on('data', function(req) {
var data = req.toString();
try {
json = JSON.parse(data);
} catch (err) {
console.log("JSON parse error:" + err);
}
});
是我收到的加息的错误是:
SyntaxError: Unexpected token {
这似乎是下一个请求被标记到当前结尾的开始之一。
我试过使用;为每个JSON请求结束分隔符,然后使用:
var data = req.toString().substring(0,req.toString().indexOf(';'));
然而这种方法,而不是造成JSON解析错误似乎导致完全丢失客户端上的一些要求,因为我提高速度写超过300每秒。
是否有任何的最佳做法或更有效的方式来界定通过TCP套接字传入的请求?
谢谢!
有两个相关的问题[1](http://stackoverflow.com/questions/ 9962197/node-js-readline-not-wait-for-a-full-line-on-socket-connections),[2](http://stackoverflow.com/questions/7034537/nodejs-what-is-the -proper路到处理-TCP-插座流-哪个定界符)。在他们中,解决方案都是使用分隔符,并存储了以前消息的剩余部分。不幸的是,更好的解决方案似乎还不存在。 – mayconbordin