【发布时间】:2021-03-16 20:15:25
【问题描述】:
这个 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 服务器接收到的消息。但是,我可以相信 websocket 服务器发送的 json 总是会立即到达客户端吗?如果它部分到达怎么办?解析它会破坏它。
即使对于非常大的 json 消息,我也可以做出这个假设吗?
我问是因为在 TCP 流上,这是不可能的。消息可能部分到达。
如果无法一次完整接收消息,我怎么知道何时解析 JSON?
【问题讨论】: