使用 nodejs 和 socket.io 搭建了一个推送服务,但是不知道后端如何构建? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
pizida
V2EX    Node.js

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

  •  
  •   pizida 2016-03-23 16:45:14 +08:00 7147 次点击
    这是一个创建于 3540 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    20 条回复    2017-08-25 15:02:09 +08:00
    daysv
        1
    daysv  
       2016-03-23 16:58:32 +08:00
    你似乎什么都不懂,先去了解什么是 socket.io 再说
    pizida
        2
    pizida  
    OP
       2016-03-23 17:24:21 +08:00
    @daysv socket.io 不是封装了 websocket 和 comet 的一个类库么?
    neoblackcap
        3
    neoblackcap  
       2016-03-23 17:30:31 +08:00
    @pizida 那你既然知道 websocket 那你就应该知道 websocket 是不用轮询的,只要你连接一建立,那么服务端就可以往客户端推送消息,直接写就可以了。完全又你服务端决定,这个还要什么轮询
    daysv
        4
    daysv  
       2016-03-23 17:32:33 +08:00
    需要推送就服务端直接推送了啊
    td width="auto" valign="top" align="left">
        5
    pizida  
    OP
       2016-03-23 17:35:12 +08:00
    @neoblackcap 我的实现场景是这样的,服务端什么时候去推送呢?因为数据是实时的。比如全网用户累计的积分,金币之类的东西。
    pizida
    neoblackcap
        6
    neoblackcap  
       2016-03-23 17:36:42 +08:00
    @pizida 你在服务端实现一个 callback 啊,你数据出来了就调用那个 callback , callback 里面进行推送操作
    pizida
        7
    pizida  
    OP
       2016-03-23 17:37:49 +08:00
    @daysv 场景是前端需要获得实时数据,这个数据每秒都在变化,那后端是不是每秒都要推送?没有接触过 nodejs ,请指点一下。
    pizida
        8
    pizida  
    OP
       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
        9
    v370  
       2016-03-23 17:51:01 +08:00
    socket.io 有内存泄漏
    sun019
        10
    sun019  
       2016-03-23 17:51:09 +08:00
    那现成的来用啊 jpush 啥的
    pizida
        11
    pizida  
    OP
       2016-03-23 18:05:28 +08:00
    @v370 严重么
    pizida
        12
    pizida  
    OP
       2016-03-23 18:05:44 +08:00
    @sun019 项目要自己实现哇
    v370
        13
    v370  
       2016-03-23 18:10:30 +08:00
    @pizida 严重 每天重启服务器
    pizida
        14
    pizida  
    OP
       2016-03-23 18:27:38 +08:00
    @v370 额,那有没有什么靠谱的方案推荐
    fds
        15
    fds  
       2016-03-23 18:30:09 +08:00
    有数据就调用 socket.emit 发送给客户端呗
    vikeria
        16
    vikeria  
       2016-03-23 19:21:19 +08:00 via iPhone
    可以考虑用 redis 的 publish 和 subscribe
    vikeria
        17
    vikeria  
       2016-03-23 19:27:01 +08:00 via iPhone
    对 node 不是很熟,但是如果上层 api 的底层用到 epoll 等异步非阻塞的 io 的话,一半都能做到推送吧,轮询是操作系统内核在做的事情
    tencoldays
        18
    tencoldays  
       2016-03-23 19:30:04 +08:00
    @pizida 可以直接 emqtt.io...
    w3hacker
        19
    w3hacker  
       2016-03-23 21:05:56 +08:00
    嗯 可以试试 emqtt 他支持 MQTT 协议、 sockjs 协议、 stomp 协议,可以用到网页、手机、 pc 都可以,值得一试
    happybirthday
        20
    happybirthday  
       2017-08-25 15:02:09 +08:00
    我觉得这种东西自己开发太麻烦了,就别自己捣鼓了,找个第三方,方便,GoEasy 就挺不错的,我昨天试了一下,代码简洁易懂,几分钟我就洗了一个自己的实时推送功能;官网: http://goeasy.io/
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2911 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 13:51 PVG 21:51 LAX 05:51 JFK 08:51
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86