我试过socket.io,我发现当客户端html页面加载时,创建了一个新的套接字连接。当我刷新页面时,我发现一个新的套接字连接创建,然后旧连接断开。
我的问题是如何避免这种情况?因为我正在构建一个聊天室应用程序。当用户进入房间页面时,在“连接”服务器端发出“欢迎用户xxx来!”,并在“disconnectc”事件中发出“用户xxx已离开”。但是当用户刷新当前页面时,这将再次触发“断开连接”事件和“连接”事件。它将发出“欢迎用户xxx来!”和“用户xxx离开。”消息在一起。
如何忽略页面刷新事件?就像http会话一样?
更新:我已经找到了解决问题的方法。来自这个问题Handle browser reload socket.io
答案 0 :(得分:21)
您无法阻止刷新页面,并且当用户刷新页面时无法避免socket.io断开连接。
我建议添加超时:
答案 1 :(得分:8)
您可以使用会话。即使套接字在刷新时断开连接,您仍然可以保留该特定用户的一些数据,并在套接字再次连接时使用该数据。
以下是您使用会话的方式:
var express = require('express');
var MemoryStore = require('express').session.MemoryStore;
app.use(express.cookieParser());
app.use(express.session({ secret: "keyboard cat", store: new MemoryStore({ reapInterval: 60000 * 10 })}));
app.get('/', function(req,res){
req.session.name ="clients_name";
res.render(__dirname + '/index.jade',{user:req.session.name});
});
你应该使用jade或任何其他“View Engine”来获取传递给页面的数据。