簡體   English   中英

Disconnet事件在Nginx + socket.io + xhr-polling中不觸發

[英]disconnet event doesn't fire in nginx + socket.io + xhr-polling

我嘗試通過nginx代理node.js,socket.io和xhr輪詢流量。

然后Socket.io不會觸發“斷開連接”事件。

但是,波紋管條件很好。

  • 不使用nginx代理直接連接到Node.js端口。
  • 將傳輸從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. 代理throgh 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
  • “確定”是“可以實時斷開火警事件”,“ NG”是“不能斷開火警事件”。
  • “端口80”使用nginx,“端口3000”使用node.js。
  • Trasport僅在xhr輪詢中。
  • Gallaxy S和iPhone 5與websocket兼容。

您的意思是當用戶關閉瀏覽器或選項卡時斷開連接事件嗎? 如果是這樣,請在連接服務器時在客戶端嘗試以下代碼:

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

(第一個參數'/'在您的配置中可能有所不同)

在這里您可以找到詳細信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM