我有三个申请互相交谈。websocket服务器(1),它接受来自浏览器的连接,解析url以查看需要什么数据,如果客户机内存中有数据,则将其提供给客户机,如果没有数据,则从另一个称为“Fetcher”(2)的应用程序中请求数据。Fetcher接收此作业,从返回JSON数据的简单API(3)请求它,并将其发送回websocker服务器,后者将其发布给连接的客户机。然后“Fetcher”开始定期检查该URL/作业是否有更新,并在更新时将新数据发送到websocket服务器。
我使用socket.io进行客户端与WebSocket服务器之间的通信。Websocket服务器和提取器通过ZMQ套接字进行对话。
我用130个连接加载测试websocket服务器。Websocket服务器每秒向130个客户端发布160KB的数据。开始时,130个连接使用170MB的RAM,但很快增加到1GB,尽管没有新的连接。然后socket.io的心跳信号开始失效,导致连接断开。
我使用Nodetime拍摄堆快照。在第130个客户端连接之后,内存的外观如下所示:
346个缓冲区对象,总共44MB。
在四分钟内,缓冲区对象的数量急剧增加(同样,没有新的连接):有3012个对象,总内存为486MB。再过10分钟,它们中有3535个,总内存消耗为573MB。
function notifyObservers(resourceId) {
var data = resourceData[resourceId];
io.sockets.in(resourceId).emit('data', data);
}
// Receive new resource data
const resourceUpdatedSubscriber = zmq.socket('sub').connect('tcp://localhost:5433');
resourceUpdatedSubscriber.subscribe('');
resourceUpdatedSubscriber.on('message', function (data) {
var resource = JSON.parse(data);
resourceData[resource.id] = resource.data;
io.sockets.in(resourceId).emit('data', resourceData[resource.id]);
});
NodeJs可以使用Windows Socket API(其中包括内存泄漏,旧的已知错误)https://connect.microsoft.com/visualstudio/feedback/details/605621/winsock-c-program-cause-memory-leak
问题是,在关闭网络服务之前,WSACleanup永远不会被调用。(混淆ZMq或Nodejs不会改变这一事实)
现在,随着时间的推移,您将锁定更多的内存页,并且在第一个内存页已满后,这种情况会增加。
问题内容: 我正在使用socket.io和node.js,直到现在看起来还不错,但我不知道如何从服务器向特定客户端发送消息,如下所示: 但是无论是还是方法似乎都无法满足我的需求。 我发现一种可能的解决方案是,该方法将不发送消息的SessionId数组作为第二个参数,因此我可以将此时连接了所有SessionId的数组传递给服务器,除了那个我希望发送邮件,但是我觉得必须有一个更好的解决方案。 有任何想
问题内容: 我的socket.io版本是socket.io@0.8.7和redis@0.7.1。我在Windows上。 在某些地方,我已经看到问题已解决。我想我正在使用最新的socket.io版本。什么是generator.setMaxListeners(),在哪里可以设置? 我正在使用redis pubsub,当我订阅redis时,它会抛出此警告。 问题答案: 有一个与此相关的已知问题。好像是几
问题内容: 向所有客户端发送消息效果很好,但是我想向特定的用户名发送消息。我的server.js文件看起来像。它的作用是在运行时,客户端代码将用户添加到对象用户名以及套接字对象中。并立即将单个消息返回给每个连接的客户端。 发出消息的部分 问题答案: 试试这个: socket.id由socket.io保存,并且包含客户端的唯一ID。您可以使用以下命令进行检查:
我使用这个聊天室示例作为参考,设置了一个多房间的socket.io/nodeJS聊天服务器: https://raw.githubusercontent.com/socketio/socket.io/master/examples/chat/index.js 我使用这个doc将代码从单间修改为多间: https://socket.io/docs/roams-and-namespaces/ 我还修改
问题内容: 如何将消息从php发送到node.js?我有一个运行php和node.js的Linux服务器。 当用户完成事务(通过php)时,我想将消息从php发送到node.js。然后,节点将通过套接字连接更新客户端。 在不降低node.js性能的情况下,从php向node.js发送少量数据的好方法是什么? 问题答案: 与其他任何客户端一样,建议似乎是通过HTTP接口与节点对话。您可以使用php中
问题内容: 我从socket.io + node.js开始,我知道如何在本地发送消息和广播功能:-所有连接的客户端都收到相同的消息。 现在,我想知道如何向特定的客户端发送私人消息,我的意思是一个套接字,用于2个人之间的私人聊天(客户端到客户端流)。谢谢。 问题答案: 当用户连接时,它应使用唯一的用户名(例如电子邮件)向服务器发送消息。 一对用户名和套接字应存储在这样的对象中: 在客户端上,使用以下