使用了 setInterval 定时推送一些消息。连接数在1000左右。
原来 15 秒左右推送一次,经常出现自动断开连接的情况。
改成了20秒以后还是会有问题,而且有时有延迟。
现在CPU一直在100%
现在流程如下:
启动定时(20秒每次) - > 从 Couchbase 读取数据 -> 遍历当前登录人数 -> 针对不同人推送不同消息
试试 alinode cpu-profile 功能,找出热点。相信对你有帮助。
@yjhjstz 能具体点吗
情况具体些,比如服务器什么配置,nodejs是默认配置么, socket >1000后报什么错,你的case预计要处理多少个链接
你把各种log打出来看 我猜socket有很多ECONNRESET或者TIMEOUT
这是个比较复杂的SOCKET优化问题
已经解决了
原来是用IO对象直接 emit var io = require(“socket.io”)(http); io.emit(“cmd”+userid , _Str);
现在把每个连接的socket保存下来 onlineUsers[obj.userid] = {‘c_id’:obj.userid,‘socket’:socket}; 推送时 onlineUsers[userid].socket.emit(“cmd” +user id, _Str);
没有cpu密集型运算,怎么可能100%,单从socketio做IO发送操作只会增加内存消耗,不会飙升CPU的,从你提供的信息推测应该在第二和第三个环节有问题
setInterval(function(){ bucket.getMulti([ “Document1” , “Document2” ], function(err, result) { if(err){ console.log(new Date() + " : ERROR : " + err); } else { Emit(result); } }); } , 10 * 1000);
有个这个 。。。。
多次测试,就是 io.emit(“cmd”+userid , _Str); 这个的问题,这里注释掉以后就没啥问题。
完整的代码在这里:http://www.cnblogs.com/chenliang-zibo/p/5389939.html
其实东西并不多。
@captainblue2013 思路就是通过 CPU 采样找到热点函数,优化热点解决问题,欢迎试用。