使用 nodejs 和 socket.io 搭建了一个推送服务,但是不知道后端如何构建?

2016-03-23 16:45:14 +08:00
 pizida

因为项目需要实时推送一个消息,现在使用的技术是 nodejs 和 socket.io ,以前没有这方面的经验,后端到底需要如何推送呢?是不是跑一个定时器,执行后端文件?还是前端轮询?轮询的话好像本末倒置了。望各位指教!

6408 次点击
所在节点    Node.js
20 条回复
daysv
2016-03-23 16:58:32 +08:00
你似乎什么都不懂,先去了解什么是 socket.io 再说
pizida
2016-03-23 17:24:21 +08:00
@daysv socket.io 不是封装了 websocket 和 comet 的一个类库么?
neoblackcap
2016-03-23 17:30:31 +08:00
@pizida 那你既然知道 websocket 那你就应该知道 websocket 是不用轮询的,只要你连接一建立,那么服务端就可以往客户端推送消息,直接写就可以了。完全又你服务端决定,这个还要什么轮询
daysv
2016-03-23 17:32:33 +08:00
需要推送就服务端直接推送了啊
pizida
2016-03-23 17:35:12 +08:00
@neoblackcap 我的实现场景是这样的,服务端什么时候去推送呢?因为数据是实时的。比如全网用户累计的积分,金币之类的东西。
neoblackcap
2016-03-23 17:36:42 +08:00
@pizida 你在服务端实现一个 callback 啊,你数据出来了就调用那个 callback , callback 里面进行推送操作
pizida
2016-03-23 17:37:49 +08:00
@daysv 场景是前端需要获得实时数据,这个数据每秒都在变化,那后端是不是每秒都要推送?没有接触过 nodejs ,请指点一下。
pizida
2016-03-23 17:46:21 +08:00
@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 ,那么我如何保证实时推送?
v370
2016-03-23 17:51:01 +08:00
socket.io 有内存泄漏
sun019
2016-03-23 17:51:09 +08:00
那现成的来用啊 jpush 啥的
pizida
2016-03-23 18:05:28 +08:00
@v370 严重么
pizida
2016-03-23 18:05:44 +08:00
@sun019 项目要自己实现哇
v370
2016-03-23 18:10:30 +08:00
@pizida 严重 每天重启服务器
pizida
2016-03-23 18:27:38 +08:00
@v370 额,那有没有什么靠谱的方案推荐
fds
2016-03-23 18:30:09 +08:00
有数据就调用 socket.emit 发送给客户端呗
vikeria
2016-03-23 19:21:19 +08:00
可以考虑用 redis 的 publish 和 subscribe
vikeria
2016-03-23 19:27:01 +08:00
对 node 不是很熟,但是如果上层 api 的底层用到 epoll 等异步非阻塞的 io 的话,一半都能做到推送吧,轮询是操作系统内核在做的事情
tencoldays
2016-03-23 19:30:04 +08:00
@pizida 可以直接 emqtt.io...
w3hacker
2016-03-23 21:05:56 +08:00
嗯 可以试试 emqtt 他支持 MQTT 协议、 sockjs 协议、 stomp 协议,可以用到网页、手机、 pc 都可以,值得一试
happybirthday
2017-08-25 15:02:09 +08:00
我觉得这种东西自己开发太麻烦了,就别自己捣鼓了,找个第三方,方便,GoEasy 就挺不错的,我昨天试了一下,代码简洁易懂,几分钟我就洗了一个自己的实时推送功能;官网: http://goeasy.io/

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/265794

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX