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

qic*_*ren 19 real-time node.js socket.io

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

我的问题是如何避免这种情况?因为我正在构建一个聊天室应用程序.当用户进入房间页面时,在"连接"服务器端发出"欢迎用户xxx来!",并在"disconnectc"事件中发出"用户xxx已离开".但是当用户刷新当前页面时,这将再次触发"断开连接"事件和"连接"事件.它将发出"欢迎用户xxx来!" 和"用户xxx离开." 消息在一起.

如何忽略页面刷新事件?和http会话一样?


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

Jan*_*nen 21

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

我建议添加一个超时:

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

  • 我真的不知道你的意思..客户端的套接字在浏览器中,当重新加载页面时,该页面的所有客户端JS代码和状态基本上都被丢弃了. (3认同)

Jud*_*bas 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});
});
Run Code Online (Sandbox Code Playgroud)

并且您应该使用jade或任何其他"View Engine"来获取传递给页面的数据.