当前位置: 首页 > 知识库问答 >
问题:

socket.io未通过CloudFlare/Nginx断开连接

端木志诚
2023-03-14
server {
    listen 80;
    server_name colab.gq;
    server_name www.colab.gq;

    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header X-Forwarded-For $remote_addr;
    }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/colab.gq/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/colab.gq/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
io.on('connection', (socket) => {
  // Stuff here

  socket.on('disconnect', () => {
    console.log('disconnected!')
    // Stuff that relies on the disconnect event
  })
})

当用户关闭选项卡或重新加载页面时,disconnect事件应该会触发,但当通过Nginx和CloudFlare传递连接时,则不会触发。提前感谢您的帮助!

更新:似乎在重新加载/关闭断开连接事件后的几秒钟内最终注册。

共有1个答案

方博
2023-03-14

可能发生的是两件事。

第1:socket.io有很长的超时时间(因此几秒钟),在声明它已经断开连接之前,它正在寻找重新连接。检查reconnect_atture或reconnecting事件(注意,我已经有一段时间没有使用socket.io,所以我可能错误地选择了时间)

第二:您没有告诉socket.io它在关闭浏览器窗口时正在断开连接。

    window.addEventListener('beforeunload', () => {
       socket.disconnect();
    }
 类似资料:
  • 我的设置是cloudflare- 这是nginx为websocket连接记录的内容:162.158。75.125--[29/Oct/2016:00:01:47 0000]“GET/HTTP/1.1”101 1047-“Mozilla/5.0(X11;Linux x86_64)AppleWebKit/537.36(KHTML,如Gecko)Chrome/53.0.2785.143 Safari/53

  • 问题内容: 我有一个使用服务器上的nodejs和socket.io作为连接机制的客户端/服务器应用程序。出于与我的应用程序相关的原因,我希望每个浏览器只有一个活动连接,并拒绝来自其他选项卡的所有连接,这些选项卡可能在会话期间稍后打开。这在WebSockets上很好用,但是如果浏览器不支持WebSockets,而是使用XHR- polling,则断开连接永远不会发生,因此,如果用户只是刷新页面,则不

  • 我正在使用CloudFlare实现一个REST API。我需要添加一些在node.js上用socket.io实现的通知。当socket.io使用活动连接来保持客户机更新时,它将工作,因为连接是在服务器-客户机之间建立的,但是当socket.io进行轮询时会发生什么呢?CloudFlare是否总是为每个客户机使用相同的服务器?

  • 问题内容: 我有一个使用socket.IO的node.js应用程序。它可以在http上正常工作,但是当尝试通过https连接到套接字时,没有任何反应。 这是代码的一部分: 和功能: 客户端连接如下: 正如我说的,在http上一切正常,但是在https上连接会给我“连接被中断”。我究竟做错了什么? 问题答案: 您不能像服务器那样初始化服务器。您必须启动一个单独的https服务器,然后将socket.

  • 我正在尝试设置 rabbitmq 它可以通过 nginx 从外部(从非本地主机)访问。 nginx-rabbitmq.conf: rabbitmq.conf文件: 默认情况下,来宾用户只能从本地主机进行交互,因此我们需要创建另一个具有所需权限的用户,如下所示: 但是,当我尝试通过pika连接到Rabbitmq时,我得到了ConntionClo的异常 --[引发连接关闭异常]-- 如果我使用相同的参

  • 问题内容: 我在客户端上将nodejs与socket.io和angularjs一起使用。我从互联网上获取了angular- socketio示例,并向其中添加了方法。 套接字服务: 控制器: 但是,当我尝试使用此方法断开连接时,出现错误: 而且我不知道在哪里挖…… 问题答案: [更新] 是Angular的内部私有变量,因此您不应该真正依赖于此类事情。伊戈尔在另一个答案中描述了一些处理此问题的建议,