我已经实现了一个使用 TCP 套接字进行通信的客户端/服务器。我写入套接字的数据是字符串化的 JSON。最初一切都按预期工作,但是,随着写入速率的提高,我最终遇到 JSON 解析错误,客户端的开头在旧写入的结尾接收到新写入的开头。
这是服务器代码:
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 套接字的传入请求?
谢谢!