2012-01-23 50 views
1

我正在構建一個Node.js/Socket.io項目。在離開頁面/頁面導航時從用戶散列中刪除某人關閉

我有一個散列的用戶基於他們的websocket id。當用戶提出以下請求時,我想將它們添加到查看該頁面的一組用戶。

app.get('/board/:id', function(req, res){} 

我想繼續像

瀏覽= { 用戶名:ID,用戶名 :ID, ... }

然而我不確定如何刪除用戶讓他們說如果他們離開頁面。頁面離開時是否有某種函數被調用?

部分解決:

下,似乎這樣的伎倆在Chrome:

$(window).unload(function(){ 
     var username = $('#username').text(); 
     var pid = currentProject; 

     var data = { 
     username: username, 
     id : pid 
     } 

     socket.emit('leaving-page', data); 
    }) 
+0

我不認爲有任何100%可靠的方法來做到這一點。例如,考慮當客戶端計算機突然斷電時會發生什麼情況。 – Pointy

回答

2

...是否有某種功能能夠順利通過頁面 休假叫什麼名字? ...

是的,但它是不可靠的。

人跟蹤誰在線,誰不是,該方法通常是這樣的:

  • 添加的時間,當用戶最後一次刷新/訪問的網頁
  • 集限制爲你認爲他們離線
+0

但是你可以自由地使用「頁面離開」功能來使它更加準確。但是,如果「頁面離開」功能失敗,您應該真正備份。 – ajax333221

+0

謝謝,我會試試你的答案和@Daniele Bs答案:) – Jack

2

你可以截取與離開頁面相對應的事件。有幾種方法可以做到這一點,看看下面的鏈接,讓我知道如果有適合您的需求,如果我可以回答任何關於他們的更明確的問題:

與最後一個環節,你可以做這樣的事情:

$(window).unload(function() { 
     //remove the user from your json object with delete json_object[key]; 
    }); 

希望這會有所幫助。

1

由於您使用的是Socket.io,服務器會知道用戶何時離開了頁面,因爲套接字將被斷開。只需聽取disconnect事件。

io.sockets.on('connection', function (socket) { 

    ... 

    socket.on('disconnect', function() { 
    // The user on `socket` has closed the page 
    }); 

}); 

更重要的是,利用命名空間,讓Socket.io處理所有的連接/斷開(它無論如何做 - 無需重複的努力)。

在客戶端,

socket = io.connect('http://example.com/pagename'); 

pagename不必指向一個有效的網址,您的域名–這只是你在服務器代碼中使用的命名空間:

io.sockets.clients('pagename') 

獲取你所有當前連接到pagename名稱空間的客戶端。

相關問題