我对socket.io-client很陌生。 多次阅读文档后,我仍然不了解io.Manager和io.Socket之间的区别。 基本上,我可以从io()生成一个新的套接字。 但是如何生成管理器实例? 同时,Manager事件和Socket事件之间有什么区别。
谢谢。
+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
}
);
那就是我想要的。
我很想知道两者之间的区别,如果有的话:
这样做的目的是什么:
除了参数的非常详细但冷淡的描述,我似乎无法在文档中找到任何可用的东西。
另外,如果我可以在浏览器的客户端HTML页面中使用socket.io或socket.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发出:
套接字将发出与命名空间相关的其他事件:
请告诉我是否足够清楚。 抱歉,延迟!
@darrachequesne谢谢您的解释,您还能解释一下io(url, options)
与
io.connect(url, options)
吗? 该文档说它们都返回一个套接字实例,但是如何才能不同地使用它们呢?
我也是
我很想知道两者之间的区别,如果有的话:
- io(URL,选项)
- io.connect(URL,选项)
这样做的目的是什么:
- 新管理员(URL,选项)
除了参数的非常详细但冷淡的描述,我似乎无法在文档中找到任何可用的东西。
另外,如果我可以在浏览器的客户端HTML页面中使用socket.io或socket.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年以来似乎是这样的: https : connect()
可以在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共享。
最有用的评论
是的,文档似乎告诉我们如何创建它们,但没有告诉我们是什么使它们独特以及何时使用它们中的一种。