我有一个通过 API 和 websocket 进行通信的应用程序。websocket 用于将更新的用户数据发布到客户端,如果它在数据库中发生更改 - 这非常有效,除了在某些情况下 websocket 不接收任何数据的情况。几秒钟后,websocket 再次开始工作。
服务器日志(首先,websocket 不工作并重新开始工作)
msg="无法将数据写入 Websocket: websocket: close sent"
msg="正在向客户端发送 Ping 消息"
msg="无法将 ping 消息写入 Websocket:websocket:关闭发送"
msg="正在向客户端发送 Ping 消息"
msg="正在向客户端发送 Ping 消息"
msg="正在向客户端发送 Ping 消息"
msg="正在向客户端发送 Ping 消息"
客户端代码:
<html>
<body>
<p id="data"></p>
</body>
<script>
var ws = new WebSocket("wss://example.com/ws");
function unloadPage() {
toggleLoader();
ws.onclose = function () {};
ws.close();
}
ws.onopen = function () {
ws.send('Ping');
};
ws.onerror = function (error) {
console.log('WebSocket Error ' + error);
var d = document.getElementById("data");
d.innerHTML += "<tr><td>Failed to connect to Server.</td></tr>"
};
ws.onmessage = function (e) {
console.log(e);
var data = e.data;
var d = document.getElementById("data");
var parsedjson = JSON.parse(data);
d.innerHTML = "";
for (var i = 0; i < parsedjson.length; i++) {
d.innerHTML += parsedjson;
}
};
ws.onclose = function () {
console.log("Websocket has been closed");
};
window.addEventListener("beforeunload", unloadPage);
</script>
</html>
基本上,我们将当前数据发布到新的 Websocket 连接,当它更新时——这总是有效的。之后,如果数据库发生变化,它会将更新后的用户列表发布到频道中——然后 websocket 应将其发布到更新列表的客户端。我们还发送 ping 消息 - 失败(如上面的日志所示)。客户端本身不会记录任何错误或关闭 websocket。
尚方宝剑之说
相关分类