我大概是这样,想让服务端能检查客户端在线状态
client:
let interval;
const connect = () => {
sock = new WebSocket();
// 连上了就取消不断重连
clearInterval(interval);
};
sock.onclose = () => {
// 断了就重连
interval = setInterval(connect, 60000);
};
server:
const wsServer = new WebSocket.Server({ server });
wsServer.on("connection", async (conn, req) => {
const id = uuid.v4();
// 存一个在线的客户端到数据库里
onlineTable.addById(id);
conn.on("close", () => {
// 掉线之后,把数据库里的条目删掉
onlineTable.removeById(id);
});
});
结果现在发现 ESTABLISHED tcp connection (netstat -tnulpao | grep port | awk '{print $6}' | sort | uniq -c) 远远多于数据库里已经有的条目,多一个数量级
本地尝试了很多断网,压测之类的操作,还是没能出现 tcp connection 比数据库里多的情况
我感到没有思路,各位老哥知道该怎么查不
1
uselessVisitor 2021-02-08 09:52:41 +08:00
重连放在 onError 里面好一些吧。。
服务端不懂 js,Java 做的话一般会存 session 在 Map 里。心跳检测,不在就 remove |
2
v2Mark 2021-02-08 11:05:33 +08:00
客户端不会主动发送消息么? 还是说客户端断开了,服务器无法立马收到通知?
|
3
jchnxu OP |