gpt4 book ai didi

javascript - nginx + socket.io + xhr-polling 中不会触发断开连接事件

转载 作者:太空宇宙 更新时间:2023-11-04 02:36:37 25 4
gpt4 key购买 nike

我尝试通过 nginx 代理 node.js、socket.io 和 xhr-polling 流量。

然后 Socket.io 不会触发“断开连接”事件。

但是,以下条件工作正常。

  • 直接连接到 Node.js 端口,无需 nginx 代理。
  • 将传输从 xhr-polling 切换到 Websocket。

我的版本如下。

  • nginx:1.4.4
  • node.js:0.10.24
  • socket.io:0.9.15

我的 nginx 配置文件设置如下。

server {
listen 80;
server_name localhost;


location / {
proxy_pass http://127.0.0.1:3000/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;

proxy_read_timeout 300;
proxy_connect_timeout 300;

chunked_transfer_encoding off;
proxy_buffering off;

proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
}

我该如何解决这个问题?我错过了什么吗?提前致谢:)

<小时/>

此外,我发现了出现我的问题的新情况。

我的问题的结果取决于下面。

  1. 客户端浏览器和移动设备。
  2. 通过 nginx(端口 80)代理或直接访问 node.js(端口 3000)。

调查结果如下。

・ Chrome @ Mac OS X
・ Aquos Phone(Android Brower, Android 4.0.4)
port 80 ⇒ NG
port 3000 ⇒ OK

・ Gallaxy S(Android Brower, Android 4.2.2)
・ iPhone 5(Safari, iOS 7)
port 80 ⇒ NG
port 3000 ⇒ NG
  • “OK”是“可以实时触发断开连接事件”,“NG”是“无法触发断开连接事件”。
  • “端口80”使用nginx,“端口3000”使用node.js。
  • Trasport 仅支持 xhr 轮询。
  • Galaxy S 和 iPhone 5 与 Websocket 兼容。

最佳答案

您的意思是用户关闭浏览器或选项卡时断开连接事件吗?如果是这样,请在连接到服务器时在客户端尝试此代码:

io.connect('/', {
'sync disconnect on unload': true
});

(第一个参数'/'可能与您的配置不同)

Here您可以找到详细信息。

关于javascript - nginx + socket.io + xhr-polling 中不会触发断开连接事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21694434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com