簡體   English   中英

有沒有一種方法可以在瀏覽器選項卡之間共享套接字連接

[英]Is there a way to share socket connection between browser tabs

有些人已經在其他地方問過這個問題,我只是不確定這里是否存在。 無論如何,我將Primus.ioengine.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.

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