Socket.io-client: io.Manager和io.Socket有什么区别?

创建于 2018-06-22  ·  14评论  ·  资料来源: socketio/socket.io-client

我对socket.io-client很陌生。 多次阅读文档后,我仍然不了解io.Manager和io.Socket之间的区别。 基本上,我可以从io()生成一个新的套接字。 但是如何生成管理器实例? 同时,Manager事件和Socket事件之间有什么区别。

谢谢。

question

最有用的评论

是的,文档似乎告诉我们如何创建它们,但没有告诉我们是什么使它们独特以及何时使用它们中的一种。

所有14条评论

+1

+1

是的,文档似乎告诉我们如何创建它们,但没有告诉我们是什么使它们独特以及何时使用它们中的一种。

到目前为止,我尝试过的大多数管理器属性都可以直接应用于io piece
例如
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 } );
那就是我想要的。

我也是

我很想知道两者之间的区别,如果有的话:

  • io(URL,选项)
  • io.connect(URL,选项)

这样做的目的是什么:

  • 新管理员(URL,选项)

除了参数的非常详细但冷淡的描述,我似乎无法在文档中找到任何可用的东西。

另外,如果我可以在浏览器的客户端HTML页面中使用socket.iosocket.io-client

谢谢您,对不起,我看到这个库上做了很多工作,但是很难理解。

我完全同意。 我找不到管理器实例和套接字实例之间的任何区别。

+1,

+1

h! 所以还没有回应呢??? 像什么!

嗨! 我在这里这里添加了有关Manager和Socket类的更多详细信息。

Manager管理Engine.IO客户端实例,该实例是建立到服务器连接的低级引擎(通过使用诸如WebSocket或HTTP长轮询之类的传输)。
Manager处理重新连接逻辑。
一个管理器可以由多个套接字使用。

套接字是与服务器交互的基本类。 套接字属于某个命名空间(默认为/),并使用基础管理器进行通信。

基本上,管理器实例是在运行io()时隐式创建的。 可以使用Socket的io属性对其进行访问,并且在创建另一个Socket时将重新使用它(除非使用forceNew选项):

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

关于事件,以下事件与连接状态有关,并且将由Manager及其关联的Socket发出:

  • connect_error
  • connect_timeout
  • 重新连接
  • 重新连接
  • 重新连接错误
  • reconnect_failed
  • ping
  • ong

套接字将发出与命名空间相关的其他事件:

  • 连接
  • 断开
  • 错误

请告诉我是否足够清楚。 抱歉,延迟!

@darrachequesne谢谢您的解释,您还能解释一下io(url, options)
io.connect(url, options)吗? 该文档说它们都返回一个套接字实例,但是如何才能不同地使用它们呢?

我也是

我很想知道两者之间的区别,如果有的话:

  • io(URL,选项)
  • io.connect(URL,选项)

这样做的目的是什么:

  • 新管理员(URL,选项)

除了参数的非常详细但冷淡的描述,我似乎无法在文档中找到任何可用的东西。

另外,如果我可以在浏览器的客户端HTML页面中使用socket.iosocket.io-client

谢谢您,对不起,我看到这个库上做了很多工作,但是很难理解。

我认为io(url, options)io.connect(url, options)相等:

// 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;

现在,为什么有两种不同的方式来做相同的事情,这是一个很好的问题...:smile:。 自2012年以来似乎是这样的: httpsconnect()可以在v3中删除。

关于管理器构造函数,也许应该将其从公共API中删除。 基本上:

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"
  }
});

我已经更新了文档: https :

希望现在更清楚!

可以使用管理器很有意义,因此您可以完全控制套接字实例,而不必使用该程序包所在的全局默认管理器,该默认管理器也可以由另一个程序包fe共享。

此页面是否有帮助?
0 / 5 - 0 等级