Javascript disconnet事件不存在';t在nginx和x2B中开火;socket.io+;xhr轮询

Javascript disconnet事件不存在';t在nginx和x2B中开火;socket.io+;xhr轮询,javascript,node.js,nginx,socket.io,Javascript,Node.js,Nginx,Socket.io,我尝试通过nginx代理node.js、socket.io和xhr轮询流量 然后Socket.io不会触发“断开”事件 然而,贝娄条件工作良好 直接连接到Node.js端口,无需nginx代理 将传输从xhr轮询切换到websocket 我的版本是贝娄 nginx:1.4.4 node.js:0.10.24 socket.io:0.9.15 我的nginx配置文件设置如下 server { listen 80; server_name localhost;

我尝试通过nginx代理node.js、socket.io和xhr轮询流量

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

然而,贝娄条件工作良好

  • 直接连接到Node.js端口,无需nginx代理
  • 将传输从xhr轮询切换到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;
   }
我怎样才能解决这个问题?我错过什么了吗? 提前感谢:)


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

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

  • 客户端浏览器和移动设备
  • 通过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轮询
    • Gallaxy S和iPhone 5与websocket兼容

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

    io.connect('/', {
      'sync disconnect on unload':  true
    });
    
    (第一个参数
    '/'
    在您的配置中可能不同)


    您可以找到详细信息。

    Zub,谢谢您的回复!!但是我已经在客户端设置了选项…@TatsuyaKida尝试删除
    Upgrade
    Connection
    头。据我所知,只有WebSocket才需要,而不是XHR