V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cheshirecat
V2EX  ›  程序员

这年头做实时站应该一开始就 node.js + socket.io

  •  
  •   cheshirecat ·
    cheshirecats · 2012-08-23 13:09:39 +08:00 · 9429 次点击
    这是一个创建于 4482 天前的主题,其中的信息可能已经有所发展或是发生改变。
    当初早知道这么简单的话就不用 PHP 了,哈哈。

    研究了一下,PHP 和 node.js 之间传 session 之类比较麻烦,于是用 Ratchet 给 PHP 加 WebSocket,试了试还不错。
    22 条回复    1970-01-01 08:00:00 +08:00
    ikbear
        1
    ikbear  
       2012-08-23 13:19:51 +08:00   ❤️ 1
    最近几行php代码就把我恶心到了。你要用node.js干嘛还用php呢?
    cheshirecat
        2
    cheshirecat  
    OP
       2012-08-23 13:27:44 +08:00
    @ikbear 没办法,当时不知道 node.js 好用。现在已经写了这么多 php ,也懒得迁移了。
    cheshirecat
        3
    cheshirecat  
    OP
       2012-08-23 13:30:13 +08:00
    上面迁移的意思是用 node.js 重新写原来的 php 代码。
    dotcoo
        4
    dotcoo  
       2012-08-23 14:09:13 +08:00
    nodejs业务逻辑复杂了会死人的.
    fsw90628
        5
    fsw90628  
       2012-08-23 14:18:40 +08:00
    @dotcoo 所以 Tornado 看上去是不错的选择。
    hyq
        6
    hyq  
       2012-08-23 14:43:47 +08:00
    html页面不是很好弄,nodejs程序修改后得重启nodejs,nodejs里面如果有个未处理的错误,那么整个webserver就躺下了.这是我个人用socket.io做了一个聊天服务器的感受
    hyq
        7
    hyq  
       2012-08-23 14:48:58 +08:00
    @cheshirecat 实时站的话,的确nodejs是首选
    willmouse
        8
    willmouse  
       2012-08-23 14:50:18 +08:00
    @hyq google node-dev

    还有你说有个未出理错误server就down了是你异常处理和server的设置有问题
    funcman
        9
    funcman  
       2012-08-23 14:51:35 +08:00
    @hyq node.js绝对可以做到热更新,但是需要写一些代码。
    hyq
        10
    hyq  
       2012-08-23 15:12:07 +08:00
    @willmouse 异常处理的问题,比如说mysql连接超时了,如果没有处理这个错误的话,整个服务器进程就退出了
    hyq
        11
    hyq  
       2012-08-23 15:13:15 +08:00
    @funcman 如何热更新?
    spritevan
        12
    spritevan  
       2012-08-23 17:35:02 +08:00   ❤️ 1
    hyq
        13
    hyq  
       2012-08-23 23:13:52 +08:00
    @spritevan 不错,很好很強大
    kernel1983
        14
    kernel1983  
       2012-08-23 23:19:18 +08:00
    node稳定还需要年头, ruby这么多年下来, 没个rvm还不是到处报错

    做实时还是直接tornado靠谱
    cheshirecat
        15
    cheshirecat  
    OP
       2012-08-24 10:29:53 +08:00
    Rabbit52
        16
    Rabbit52  
       2012-08-24 10:32:59 +08:00
    @cheshirecat 楼主头像看上去在闪烁耶
    kernel1983
        17
    kernel1983  
       2012-08-24 10:46:03 +08:00
    要有智慧的看图表啊, python没有v8快是肯定的, 这个是语言设计的哲学, 另外tornado和nodejs都是玩异步的, erlang是micro thread, 正大光明的比tornado至少要多进程才对
    bhuztez
        18
    bhuztez  
       2012-08-24 11:06:11 +08:00
    @kernel1983

    > python没有v8快是肯定的, 这个是语言设计的哲学

    其实只是没JIT而已。用pypy跑这种Hello,world级的测试,tornado可以再快1.5-2倍的样子,这样tornado和node.js大致上是在一个数量级上的。

    http://casbon.me/what-will-pypy-do-for-your-website-benchmarki


    > 正大光明的比tornado至少要多进程才对

    那里面写了

    > Erlang was launched with Kernel Polling enabled, and with SMP disabled so that a single CPU was used by all the libraries.

    所以,其实tornado和node.js已经占便宜了。毕竟人家Erlang是有实现SMP逻辑的,现在只是运行期关掉,而不是编译的时候关掉,所以运行的时候还是有一点点没必要的开销的。

    另外,有JIT,太占便宜了,因为JIT一般是在单独的线程里干活的,而Erlang关了SMP只能用一个CPU。要公平的话,Erlang的得用hipe先编译好再跑。

    所以,benchmark已经严重倾向tornado和node.js了,它们还是惨败。
    kernel1983
        19
    kernel1983  
       2012-08-24 12:43:19 +08:00
    好吧, Erlang确实很快, 10k+让人很吃惊

    我们也可以看到另外一个事实就是Tornado和Nodejs跑到Erlang使用者的电脑上就很自然的变慢了, 其他的地方可以看到tornado 4000+的测试现在就只有1500了

    最后, 原来我们已经不在讨论长链接问题了, 那么就改日聊吧
    liuyanghejerry
        20
    liuyanghejerry  
       2012-08-24 13:35:20 +08:00
    个人感觉socket.io除却出色的完成websocket本身之外,最大的特点就是使用非常简单明了。本来很倾向使用nodejs+socket.io的,但是后来由于项目性质特殊不得不抛弃了这一套组合拳。
    crapthings
        21
    crapthings  
       2012-08-25 22:40:33 +08:00
    meteor.js 吧还是
    cheshirecat
        22
    cheshirecat  
    OP
       2012-08-26 01:48:36 +08:00
    摆弄出来一个方案。

    连接 WebSocket 时通过虚拟路径传递 Session ID 给服务端,然后服务端可以直接从 MemcacheD 里把 Session 的具体资料读出来 :D :D 于是可以真正做点事情了。

    鄙视meteor.js以及pusher等等第三方服务 :D :D 贵得要死。这个东西完全可以自己做。

    正在研究消息队列化方案。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2812 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 12:50 · PVG 20:50 · LAX 04:50 · JFK 07:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.