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