我们有一个内部使用聊天的应用程序。套接字对象是使用 url (https://myorgspace.com/myapp) 中的主机名创建的。代码如下:
function socketConnect(){
var socketUrl = 'wss://'+location.hostname+'/web-socket';
socket = new WebSocket(socketUrl);
socket.onmessage = function(e){console.log("Socket connected");}
socket.onclose = function(e){console.log("Web-Socket Connection closed.");}
}
问题是,6 到 8 分钟后,如果没有活动,网络套接字会自动关闭。现在接收者不会通过套接字接收任何消息。 但是,如果我通过私有 IP 连接到同一应用程序(例如:https://192.168.1.12/myapp),则套接字不会定期关闭。 任何人都可以帮忙吗?谢谢。
是因为浏览器的原因。 当页面在一段时间内(大约 5 分钟)处于非活动状态或不可见/未聚焦时,Chrome 或其他浏览器会进行某种“优化”。 之后,它限制页面与外部源的连接。
特别重要的是,您:
您可以在此处找到更多详细信息:https://developer.chrome.com/docs/web-platform/page-lifecycle-api
解决方法:您可以创建每秒(或其他时间)触发的循环并创建与服务器的新连接
const KEEP_ALIVE_INTERVAL = 1000;
const keepConnectionAlive = () => {
if (socketRef.current) {
socketRef.current.start("KeepConnectionAlive");
debug && console.log(`connected, connection ID=${socketRef?.current?.id ?? ""}`);
}
};
const intervalId = setInterval(keepConnectionAlive, KEEP_ALIVE_INTERVAL);
PS:我很确定有更好的解决方案