首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何避免在html页面刷新后在socket.io中创建新的套接字连接?

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

Stack Overflow用户
提问于 2012-03-02 14:11:41
回答 2查看 15.4K关注 0票数 19

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

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

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

更新:我已经找到了解决问题的方法。从这个问题Handle browser reload socket.io

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-02 15:33:42

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

我建议增加一个超时时间:

  • 当看到用户断开连接时,启动计时器,例如10-30秒
  • 如果用户在计时器尚未结束时返回聊天,请勿执行任何操作如果用户在计时器结束后仍未返回,则显示"user
  • “消息
票数 22
EN

Stack Overflow用户

发布于 2012-03-03 01:07:38

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

下面是使用会话的方法:

代码语言:javascript
复制
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或任何其他“视图引擎”来获取传递到页面的数据。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9528845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档