
因为项目需要实时推送一个消息,现在使用的技术是 nodejs 和 socket.io ,以前没有这方面的经验,后端到底需要如何推送呢?是不是跑一个定时器,执行后端文件?还是前端轮询?轮询的话好像本末倒置了。望各位指教!
3 neoblackcap Mar 23, 2016 @pizida 那你既然知道 websocket 那你就应该知道 websocket 是不用轮询的,只要你连接一建立,那么服务端就可以往客户端推送消息,直接写就可以了。完全又你服务端决定,这个还要什么轮询 |
4 daysv Mar 23, 2016 需要推送就服务端直接推送了啊 |
5 pizida OP @neoblackcap 我的实现场景是这样的,服务端什么时候去推送呢?因为数据是实时的。比如全网用户累计的积分,金币之类的东西。 |
6 neoblackcap Mar 23, 2016 @pizida 你在服务端实现一个 callback 啊,你数据出来了就调用那个 callback , callback 里面进行推送操作 |
8 pizida OP @neoblackcap 这是我 server 端的代码: io.on('connection', function (socket) { socket.emit('news', { hello: 'world' }); socket.on('my other event', function (data) { console.log(data); }); }); 这是 client 端代码: var socket = io.connect('http://localhost:3000'); socket.on('news',function(data){ console.log(data); socket.emit('my other event',{my:'data'}); }); 现在前端已经可以获取到{hello:'world'}这个 json ,那么我如何保证实时推送? |
10 sun019 Mar 23, 2016 那现成的来用啊 jpush 啥的 |
15 fds Mar 23, 2016 有数据就调用 socket.emit 发送给客户端呗 |
16 vikeria Mar 23, 2016 via iPhone 可以考虑用 redis 的 publish 和 subscribe |
17 vikeria Mar 23, 2016 via iPhone 对 node 不是很熟,但是如果上层 api 的底层用到 epoll 等异步非阻塞的 io 的话,一半都能做到推送吧,轮询是操作系统内核在做的事情 |
18 tencoldays Mar 23, 2016 |
19 w3hacker Mar 23, 2016 嗯 可以试试 emqtt 他支持 MQTT 协议、 sockjs 协议、 stomp 协议,可以用到网页、手机、 pc 都可以,值得一试 |
20 happybirthday Aug 25, 2017 我觉得这种东西自己开发太麻烦了,就别自己捣鼓了,找个第三方,方便,GoEasy 就挺不错的,我昨天试了一下,代码简洁易懂,几分钟我就洗了一个自己的实时推送功能;官网: http://goeasy.io/ |