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