如何避免在html页面刷新后在socket.io中创build一个新的套接字连接?

我曾尝试过socket.io,我发现当客户端的html页面加载时,一个新的套接字连接创build。当我刷新页面时,发现一个新的套接字连接create,然后旧的连接断开。

我的问题是如何避免这一点? 因为我正在构build聊天室应用程序。 当用户进入房间页面时,在“连接”服务器端发出“欢迎用户xxx来了!”,并在“断开”事件发出“用户xxx离开”。 但是当用户刷新当前页面时,这将会触发“断开”事件并再次填充“连接”事件。 它会发出“欢迎用户xxx来!” 和“用户xxx离开”。 消息一起。

如何忽略页面刷新事件?就像HTTP会话?


更新 :我已经find了解决问题的方法。 从这个问题处理浏览器重新加载socket.io

您不能阻止刷新页面,并且当用户刷新页面时,也无法避免socket.io断开连接。

我会build议添加一个超时:

  • 当用户看到断开连接时,启动一个计时器,比如10-30秒
  • 如果用户在定时器未完成时返回聊天,则不要执行任何操作
  • 如果用户在计时器结束后没有返回,则显示“用户已经离开”消息

你可以使用会话。 即使套接字在发生刷新时断开连接,仍然可以保留该特定用户的一些数据,并在套接字再次连接时使用该数据。

以下是您如何使用会话:

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}); }); 

你应该使用翡翠或任何其他“查看引擎”来获取传递到页面的数据。