Socket.io-client: Qual é a diferença entre io.Manager e io.Socket?

Criado em 22 jun. 2018  ·  14Comentários  ·  Fonte: socketio/socket.io-client

Eu sou meio novo no socket.io-client. Depois de ler o documento várias vezes, ainda não entendi quais são as diferenças entre io.Manager e io.Socket. Basicamente, posso gerar um novo soquete de io (). mas como posso gerar uma instância do gerenciador? Enquanto isso, quais são as diferenças entre o evento do Manager e o evento do Socket.

obrigado.

question

Comentários muito úteis

Sim, parece que a documentação nos diz como criá-los, mas não nos diz o que os torna únicos e quando usar um ou outro.

Todos 14 comentários

+1

+1

Sim, parece que a documentação nos diz como criá-los, mas não nos diz o que os torna únicos e quando usar um ou outro.

como tentei até agora, a maior parte da propriedade do gerente poderia ser aplicada diretamente na peça
por exemplo
socket = io( 'http://192.168.2.2:8088' + Param.chatNamespace + '?parammmm=1', { query: { key: 'Michael' }, path: Param.path, transports: ['websocket'], autoConnect: false, // like this, could be found in manager piece } );
E é isso que eu quero perfeitamente.

eu também

Adoraria saber a diferença, se houver, entre:

  • io (url, opções)
  • io.connect (url, opções)

E qual é o propósito de:

  • novo gerente (url, opções)

Não consigo encontrar nada utilizável na documentação além de uma descrição muito detalhada, mas fria dos parâmetros.

Além disso, se eu puder usar na página html do cliente do meu navegador, o socket.io ou o socket.io-client

Obrigado e desculpe, vejo que muito trabalho foi colocado nesta biblioteca, mas é muito confuso pegar o jeito.

Eu concordo completamente. Não consigo encontrar nenhuma diferença entre o gerenciador e as instâncias de soquete.

+1,

+1

Menh !! então nenhuma resposta sobre isso ainda ??? como wth !!

Oi! Eu adicionei mais detalhes sobre as classes Manager e Socket aqui e aqui .

O gerenciador gerencia a instância do cliente Engine.IO, que é o mecanismo de baixo nível que estabelece a conexão com o servidor (usando transportes como WebSocket ou HTTP long-polling).
O gerente lida com a lógica de reconexão.
Um único Manager pode ser usado por vários Sockets.

Um Socket é a classe fundamental para interagir com o servidor. Um Socket pertence a um certo Namespace (por padrão /) e usa um Manager subjacente para se comunicar.

Basicamente, a instância do gerenciador é criada implicitamente ao executar io() . Ele pode ser acessado com o atributo io do Socket, e será reutilizado se você criar outro Socket (a menos que você use a opção forceNew ):

const socket = io();
const socket2 = io("/test2");
// socket.io === socket2.io
const socket3 = io("/test3", { forceNew: true }); // new manager
// socket.io !== socket3.io

Em relação aos eventos, os seguintes eventos estão relacionados ao estado da conexão e serão emitidos tanto pelo Manager quanto pelos Sockets associados:

  • connect_error
  • connect_timeout
  • reconectar
  • reconectando
  • reconectar_error
  • reconnect_failed
  • ping
  • pong

O Socket emitirá esses eventos adicionais, que estão relacionados ao Namespace:

  • conectar
  • desconectar
  • erro

Por favor, me diga se isso está claro o suficiente. E desculpe a demora!

@darrachequesne Obrigado por sua explicação, também você pode explicar um pouco a diferença entre io(url, options) e
io.connect(url, options) por favor? O documento diz que ambos retornam uma instância de soquete, mas como podemos usá-los de maneira diferente?

eu também

Adoraria saber a diferença, se houver, entre:

  • io (url, opções)
  • io.connect (url, opções)

E qual é o propósito de:

  • novo gerente (url, opções)

Não consigo encontrar nada utilizável na documentação além de uma descrição muito detalhada, mas fria dos parâmetros.

Além disso, se eu puder usar na página html do cliente do meu navegador, o socket.io ou o socket.io-client

Obrigado e desculpe, vejo que muito trabalho foi colocado nesta biblioteca, mas é muito confuso pegar o jeito.

Acho que io(url, options) e io.connect(url, options) são iguais:

// https://github.com/socketio/socket.io-client/blob/2.3.0/lib/index.js#L15
module.exports = exports = lookup;

// https://github.com/socketio/socket.io-client/blob/2.3.0/lib/index.js#L85
exports.connect = lookup;

Agora, por que existem duas maneiras diferentes de fazer a mesma coisa, essa é uma boa pergunta ...: sorria:. Parece ser assim desde 2012: https://github.com/socketio/socket.io-client/commit/d5652feadc1a2085942b5a6a22394f07242e77b2. Vou verificar se há motivos específicos para isso, mas, caso contrário, o connect() pode ser removido na v3.

Em relação ao construtor do gerenciador, talvez deva ser removido da API pública. Basicamente:

const socket = io("ws://example.com/my-namespace", {
  reconnectionDelayMax: 10000,
  query: {
    auth: "123"
  }
});

// is the same as
const manager = new Manager("ws://example.com", {
  reconnectionDelayMax: 10000
});
const socket = manager.socket("/my-namespace", {
  query: {
    auth: "123"
  }
});

Atualizei a documentação: https://github.com/socketio/socket.io-website/commit/e779468a8df739a7ff4316719af2931d6ec70539

Espero que esteja mais claro agora!

Ter acesso ao gerenciador faz muito sentido, então desta forma você pode ter controle total das instâncias de soquete ao invés de usar o gerenciador padrão global que o pacote contém, o qual também pode ser compartilhado por outro pacote fe.

Esta página foi útil?
0 / 5 - 0 avaliações