我已經實現了使用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