请教 nodejs socket.io 大神来助攻一下 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xiyan
V2EX    Node.js

请教 nodejs socket.io 大神来助攻一下

  •  
  •   xiyan 2017-06-19 11:01:14 +08:00 3312 次点击
    这是一个创建于 3043 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最新用 socket.io 写了个小程序,用递归每秒刷新一次数据库,并把读出来的数据 emit 到前端,前端有审核功能,点击后 remove 掉,然后更新数据库,现在出现了一个问题,程序运行一天之后,就会变得非常卡,一看服务器宽带的使用非常高,请教大神,会是什么原因呢

    13 条回复    2017-06-19 15:17:36 +08:00
    tinytin
        1
    tinytin  
       2017-06-19 12:28:04 +08:00 via iPhone
    万能重启进程大法
    learnshare
        2
    learnshare  
       2017-06-19 12:55:10 +08:00
    用递归每秒刷新一次数据库,不是这里的问题?
    robinlovemaggie
        3
    robinlovemaggie  
       2017-06-19 12:56:34 +08:00
    问题可能出在递归上
    smallX
        4
    smallX  
       2017-06-19 13:03:36 +08:00
    不会是每个连接 都 递归每秒刷新一次数据库,并把读出来的数据 emit 到前端 。。。
    awanabe
        5
    awanabe  
       2017-06-19 13:07:09 +08:00
    没有释放数据库链接? 看下连接池呢
    qfdk
        6
    qfdk  
    PRO
       2017-06-19 13:13:09 +08:00 via iPhone
    你 f12 看一下 console 那边打了多少的 log.... 是那边的问题
    miaotaizi
        7
    miaotaizi  
       2017-06-19 13:43:49 +08:00
    为什么用了 socket.io 了还要去做这种 每秒刷新的动作?
    NaVient
        8
    NaVient  
       2017-06-19 13:46:09 +08:00
    socket 不就是为了让你不用每秒刷新吗
    POPOEVER
        9
    POPOEVER  
       2017-06-19 13:53:08 +08:00
    websocket 是长连接啊,每秒刷一次是什么目的?
    solee
        10
    solee  
       2017-06-19 14:07:59 +08:00
    websocket 就是为了解决你轮询的问题,长连接你直接 emit 就好。
    xiyan
        11
    xiyan  
    OP
       2017-06-19 14:17:06 +08:00
    感谢各位大神回复,我需要每秒往前端推送一次数据,需要读取数据库的新数据,实现的方式不正确吗
    liujin834
        12
    liujin834  
       2017-06-19 14:48:03 +08:00
    @xiyan 数据库里的新数据是哪里来的?我觉得你这个设计可能是有点欠缺的。提供 3 点建议:

    1. 在更新数据的地方提供一个事件或者其它方式的触发功能,一旦触发直接 socket emit 消息,不用一直去扫数据库。

    2. 如果更新数据库的操作是其他语言写的,可以试试 Rabbit MQ 列队,这是数据量大的方案。如果是 Postgresql,可以写一个 python 的函数作为触发器,python 有 socket emit 可以用,这是数据量小的方案。

    3. 检查 web socket 的前后端代码,已经下线的用户要及时释放 socket 资源,否则虽然前端用户已下线,但是服务器上可能还在一直尝试 emit。
    xiyan
        13
    xiyan  
    OP
       2017-06-19 15:17:36 +08:00
    @liujin834 非常感您回答,我们这边服务器是 PHP 架构的,我这个小程序其实也是嵌入到 PHP 项目的,目前是想学习 socket.io,写了个测试的小程序,我现在在调试,可能是数据库连接池没有释放的原因
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2547 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 02:31 PVG 10:31 LAX 19:31 JFK 22:31
    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