在用node.js做一个推送信息的模块,有个问题想请教下各位。
模块要推送的信息是存在MySQL中的。如何实现数据库中有新的信息插入的时候,就通知node.js进行推送呢?
我目前有两个想法: 1、nodejs对数据库进行轮询。 2、在MySQL中设置触发器,当有新数据插入时,触发器被触发,MySQL调用nodejs进行消息的推送,推送完再关掉nodejs。
这两种想法都不太好,各位Node.jser有什么好的思路么?
最理想的是新增信息模块(基于J2EE),新增信息之后给nodejs发一条信息,但是这样如何实现呢
谢谢!
首先是用户同时和原来的java与nodejs服务器建立连接,由nodejs服务保持连接。 然后在新增信息模块将消息存入一个队列,每隔固定时间(如500ms)向nodejs服务发送一次请求,比如http的post或UDP协议,并清空队列。 每隔固定时间发送是为了减少发送次数,根据服务的实时性可以取消或者增加。 hu.js上朋友网用nodejs做的就是这样的事情。 另一个,不理解“不在线的用户会收到一个提示”,怎么提示?提示可以拆成另一个服务,在推信息的时候可以根据用户状态判断是调用哪个服务。
多谢指点。
不在线的用户 上线之后 会收到一个新消息的提示,我可能没有表达清楚。
为什么用户需要同时和java与nodejs服务器建立连接呢?java需要做用户的验证么
hu.js是啥啊?朋友网是QQ那个?能否给个链接?
最近也打算做类似的功能.
node.js + Socket.IO 做实时推送
Java 做主要实现
Java & node.js 之间使用 mq(ActiveMQ) 进行通讯
关于插入数据/数据改动的时候通知到bowser端. 这个在java模块提供支持. 对 pojo 做改动, 或者 dao 层做 insert/update 操作的时候, boardcast 到 mq 服务器, node.js(stomp模块) 接收到消息后, push 到bowser.
这篇文章不错: node.js 通过 zeromq, redis 和其他语言交互: http://www.gridshore.nl/2011/07/28/combining-java-and-node-js-through-redis-pubsub-and-a-json-remote-interface/
@wity_lv 呵呵,我现在做的项目中就用到了activeMQ让java与php通信,正准备用nodejs+socket.io+express+redis做实时消息,通过redis让php与nodejs通信
轮询是不科学的。 就像你说的。 1.在你保存数据到数据库的时候,同时调用nodejs推送接口 2.缓存,如redis,同样是在写数据库的同时往redis写消息队列,nodejs轮询redis消息队列。这个速度比轮询数据库要快。
最合理的方式用memcached,当PHP或者Java跟新数据库后,将需要传递给nodejs的数据同时插入memcached。nodejs用setTimeout(fn,msec),设定每秒轮询,这样效率就最高了。