建立一个websocket+redis推送服务器,遇到阻塞问题
sever端,使用nodejs+redis建立一个推送服务器,运作机制是 nodejs不停地读取redis中的数据,然后使用websocket发送给client。 当client通过websocket连接服务器,然后服务器就开始向client不停的发送数据。 server端,我尝试使用while循环不停地访问redis数据库,发现代码在while这边卡住了。 求思路~~~~~~简易代码就好
2 回复
我做过类似的事情,你while里面不停地去访问redis,由于是异步的,会不断去和redis建立链接,这样会占满cpu,占满网络资源,甚至占满内存。
我之前在redis里面存储的是list结构的数据,思路是这样的:每次要读redis里面的数据时先用llen查一下有多少数据,如果有超过200条(自己设置阀值),就读200条出来并且在处理完这二百条之后再立即去redis里面继续读数据,如果少于200条时就全部读出来并在处理完之后500ms(自己设置)再去读redis里面的数据。或者傻瓜式的:每500毫秒去拿一次数据。(瞬间压力就下来了)
其实你应该是想弄一个队列服务器的,建议还是用专门的库或者用rabbitMq这样的大杀器。如果自己写,容错做的不好的话很容易出bug.
@showen 题主的重点还是推送,而不是队列,单纯队列而言,redis就可以。 处理好流程的话就行了,这个while明显是同步编程语言带来的习惯