这很奇怪。这是我的日志的删节输出:
info - socket.io started
debug - served static content /socket.io.js
debug - client authorized
info - handshake authorized D7J-52pdfYAtijFhFxh7
debug - setting request GET /socket.io/1/websocket/D7J-52pdfYAtijFhFxh7
debug - set heartbeat interval for client D7J-52pdfYAtijFhFxh7
debug - client authorized for
debug - websocket writing 1::
establishing db connection.
Attaching new socket D7J-52pdfYAtijFhFxh7 to namespace /59a0747b-50b3-46c9-be7e-3d74fd513fcf for actID: 1.
debug - served static content /socket.io.js
debug - client authorized
info - handshake authorized 6eUwG7fH-CG3vx3CFxh8
debug - setting request GET /socket.io/1/websocket/6eUwG7fH-CG3vx3CFxh8
debug - set heartbeat interval for client 6eUwG7fH-CG3vx3CFxh8
debug - client authorized for
debug - websocket writing 1::
establishing db connection.
debug - client authorized for /59a0747b-50b3-46c9-be7e-3d74fd513fcf
debug - websocket writing 1::/59a0747b-50b3-46c9-be7e-3d74fd513fcf
Attaching new socket 6eUwG7fH-CG3vx3CFxh8 to namespace /59a0747b-50b3-46c9-be7e-3d74fd513fcf for actID: 1.
第一个块是初始客户端连接,它将命名空间传递给socket.io,如下所示:http://server/59a0747b-50b3-46c9-be7e-3d74fd513fcf
请注意这两行是空白的:
debug - client authorized for
debug - websocket writing 1::
在我点击客户端网页上的刷新后,会出现第二个块(在同一个日志中)。相同的连接URL,但您会注意到
debug - client authorized for /59a0747b-50b3-46c9-be7e-3d74fd513fcf
debug - websocket writing 1::/59a0747b-50b3-46c9-be7e-3d74fd513fcf
正在显示必要的信息,以便节点将数据发送到命名空间的客户端。
修改
我不明白为什么我必须刷新客户端页面才能成功建立连接,尤其是当我调查
在初始客户端连接之后,io对象中的任何位置都找不到命名空间。为什么? io.namespaces['/59a0747b-50b3-46c9-be7e-3d74fd513fcf'].sockets
对象时,会列出客户端的套接字。
可能或者可能不值得一提的是db查找是在客户端连接上发生的第一件事,我使用的是node-mysql,但是它连接到另一台远程服务器以获取该信息。