[英]Is there a way to share socket connection between browser tabs
有些人已經在其他地方問過這個問題,我只是不確定這里是否存在。 無論如何,我將Primus.io
與engine.io
用作變壓器。 我想知道是否有可能在瀏覽器(客戶端)上共享websocket連接。 就像我連接一個客戶端,然后在另一個選項卡上連接另一個客戶端一樣。 理想情況下,它們應該獲得與我通過套接字發送的內容相同的連接,兩個選項卡都應該能夠獲得消息。
其他人提到過使用localStorage
作為在不同選項卡之間共享/通信相同數據的方法,但是我只是覺得它並不整潔。
非常感謝您的幫助。
最好,
每個選項卡將具有到服務器的單獨連接,並具有唯一的套接字ID。
如果要向每個套接字發出有關用戶ID或會話ID的消息,則需要一些東西來將用戶或會話映射到其多個套接字連接。
在Socket.IO中,它們具有“房間”的概念。
connection
您可以將插座添加到房間中 。 本示例將使用passport.js認證的用戶名進行分組。
io.on('connection', function(socket){
socket.join(socket.request.user.username);
});
然后,您可以向該房間的所有插座發送消息。
io.to(username).emit('some event'):
Socket.IO在disconnect
為您清理房間。
https://github.com/cayasso/engine.io-rooms是engine.io房間的實現,可能有用。
簡單來說
如果兩個選項卡中的代碼配合使用,則可以在一個選項卡中與另一個選項卡共享來自webSocket連接的數據。 當一個選項卡打開時,它必須找出是否有任何其他選項卡已通過現有的webSocket連接打開,然后必須要求該選項卡與新選項卡共享其數據。 這不是一個微不足道的操作,因為瀏覽器窗口無法輕松找到其他瀏覽器窗口,除非新窗口是由先前窗口的腳本打開的,而不是由用戶打開的。
但是,如果每個Windows都嘗試與服務器建立webSocket連接,則每個Windows都將獲得自己的webSocket連接。 選項卡之間不會自動共享webSocket連接。
僅供參考,此處的通常行為是,每個窗口僅獲得與服務器的自己的webSocket連接,然后服務器僅與每個瀏覽器窗口進行通信。 如果一個窗口中的某些信息需要與另一個窗口保持同步,則可以對服務器進行編碼,以使兩種信息都保持最新。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.