簡體   English   中英

socket.io 的默認行為實際上是什么?

[英]what is actually the default behavior of socket.io?

我在客戶端和服務器端都使用socket.io 這是一個很棒的庫,但我必須說文檔中沒有描述默認行為,這使得使用該庫變得如此混亂。 至少我沒有找到任何默認行為的參考。

基本上,我看了教程,其中使用 socket.io 構建了一個基本的聊天應用程序。 在教程中,服務器自動向所有連接的客戶端發送消息。 這是服務器端的默認行為嗎?

我不確定這一點。 我正在開發一個應用程序,用戶可以(取消)訂閱特定主題並從服務器接收值。 假設我有兩個主題(topic1 和 topic2)。 我打開了兩個客戶端(client1 和 client2),並從 client1 訂閱了 topic1。 我注意到我在 client1 中收到了 topic1 的 value1 但 client2 什么也沒收到。

const io = require('socket.io')(3000); // create server
  io.on('connection', socket => {
      console.log("client is connected over sockets");
    socket.on('subscribe', () => {socket.emit('send-msg', "send to client");})
  });

在上面的這種情況下,服務器將發送給所有客戶端還是僅發送給一個客戶端。 您能否向我澄清這一點並告訴我 socket.io 的默認行為是什么


PS:我注意到 socket.io 的另一件事是有很多方法可以做同樣的事情,但沒有很好的記錄。 例如,我正在使用 socketIOClient 函數實例化一個客戶端: const socket = socketIOClient("my_host"); 但是我看過很多使用openSocket函數甚至直接使用io函數的教程(這里出於某種原因作者在html中添加了這個<script defer src="http://localhost:3000/socket.io/socket.io.js"></script> )

所有這些功能都做同樣的事情,對吧?

您正在查看namespace.emitsocket.emit之間的區別。 一個套接字是一個特定的連接,在它上面發出一個事件只將它發送到那個連接。 另一方面,命名空間是一組多個套接字,在其上發出事件會將其發送到組中的每個套接字。 默認情況下,整個io服務器是一個命名空間,因此io.emit(...)向所有連接的客戶端發送一條消息。 您可以將套接字分組到任意命名空間和房間中,以便輕松地向選定的組發送消息。

暫無
暫無

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

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