我有一个简单的socket.io客户端和服务器程序,在node.js上运行。在断开连接之前(如聊天),客户端和服务器在它们之间交换消息几分钟。
如果有任何函数/方法我可以用来获取传输的总字节数(读/写),套接字关闭后?
目前,我正在为客户端发送和接收的每条消息添加消息大小。但是,根据我的理解,在socket.io中,取决于使用的协议(websocket,xhr-polling等),发送的最终有效负载的大小将因标头/包装器大小而不同。因此,仅添加消息字节将无法准确测量传输的字节数。
我可以使用像Wireshark这样的监控工具来获取此值,但我更喜欢使用javascript实用程序来获取此值。在线搜索,没有给我任何合理的答案。
对于纯websocket连接,我可以使用以下函数获取此值:socket._socket.bytesRead
和socket._socket.bytesWritten
感谢任何帮助!
答案 0 :(得分:0)
如果你想要这样一个功能,无论底层传输在socket.io连接之下是什么都有用,那么这必须是socket.io的一个基本功能,因为只有它知道它的内容的详细信息。 ; s每个传输和协议。
但是,socket.io没有为它可以使用的各种传输内置此功能。我得出结论,如果您要使用socket.io接口来抽象出该协议之上的特定协议和实现,那么您放弃了确切知道socket.io选择使用多少字节的能力。为了在其选择的传输上实现连接。
可能有调试API(可能只适用于浏览器扩展程序,而非标准网页),可以让您访问Chrome调试器中显示的部分页面信息,以便进行调查。如果您想了解更多信息,请参阅chrome.devtools.network的信息。
答案 1 :(得分:0)
从v2.2.0版开始,我设法获得了字节数据。当客户端关闭浏览器窗口并且reason
参数为transport error
时,才指定这些唯一的问题。如果客户端使用socket.close()
或.disconnect()
或服务器使用.disconnect()
,则字节为0
。
socket.on('disconnect', (reason) => {
let symbs = Object.getOwnPropertySymbols(socket.conn.transport.socket._socket);
let bytesRead = socket.conn.transport.socket._socket[symbs[3]];
let bytesWritten = socket.conn.transport.socket._socket[symbs[4]];
});