这个Websockets教程 https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_client_applications 给出了下面的示例:
exampleSocket.onmessage = function(event) {
var f = document.getElementById("chatbox").contentDocument;
var text = "";
var msg = JSON.parse(event.data);
var time = new Date(msg.date);
var timeStr = time.toLocaleTimeString();
switch(msg.type) {
case "id":
clientID = msg.id;
setUsername();
break;
case "username":
text = "<b>User <em>" + msg.name + "</em> signed in at " + timeStr + "</b><br>";
break;
case "message":
text = "(" + timeStr + ") <b>" + msg.name + "</b>: " + msg.text + "<br>";
break;
case "rejectusername":
text = "<b>Your username has been set to <em>" + msg.name + "</em> because the name you chose is in use.</b><br>"
break;
case "userlist":
var ul = "";
for (i=0; i < msg.users.length; i++) {
ul += msg.users[i] + "<br>";
}
document.getElementById("userlistbox").innerHTML = ul;
break;
}
if (text.length) {
f.write(text);
document.getElementById("chatbox").contentWindow.scrollByPages(1);
}
};
这段代码用于解析从WebSockets服务器接收到的消息。但是,我能相信由WebSockets服务器发送的JSON数据总是一次性到达客户端吗?如果它只到达了部分数据,那么解析就会出现问题。
即使对于非常大的JSON消息,我也能做出这个假设吗?
我之所以问这个问题,是因为在TCP流中,这是不可能的。消息可能只会部分到达。
如果无法一次性完整地接收消息,我该如何知道何时解析JSON?