V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
teavoid
V2EX  ›  Node.js

计划用nodejs作为后端,开发一个类似微信的群聊系统,问下大家有什么好的建议?

  •  
  •   teavoid · 2014-01-16 22:45:34 +08:00 · 9937 次点击
    这是一个创建于 3974 天前的主题,其中的信息可能已经有所发展或是发生改变。
    需求是:
    1、多人的群聊
    2、支持文字,图片,语音和视频
    3、客户端是iOS & android app

    初步的想法是:
    1、文字、图片、语音和视频的上传均通过http post上传
    2、通过udp向app客户端广播通知群聊有新消息,会有个udp的握手,没有收到回包则重复通知3次。另,app和server之间有个udp的心跳。
    3、接收到通知的app通过http请求来下载文字、图片、语音和视频等信息

    这个想法是否靠谱?另外是否有比较成熟的开源实现这套逻辑?
    16 条回复    2015-01-27 17:41:48 +08:00
    rekey
        1
    rekey  
       2014-01-16 23:12:52 +08:00 via Android   ❤️ 1
    zhujinliang
        2
    zhujinliang  
       2014-01-16 23:31:10 +08:00 via iPad   ❤️ 1
    我做过类似的,我的建议是使用websocket等现成的协议做底层协议,解决包处理上的处理(粘包问题),同时方便跨平台,各平台或框架下应该都有其websocket库。
    除非特别的情况,没必要使用udp协议,徒增麻烦,反而到最后,你处理完各种可能的错误,最后发现差不多是在udp上又封了个tcp。
    vibbow
        3
    vibbow  
       2014-01-16 23:37:51 +08:00
    为什么 要 重复 造轮子...
    teavoid
        4
    teavoid  
    OP
       2014-01-16 23:49:46 +08:00
    @rekey iOS 和 android上面都可以使用socket.io么?原生代码,不是js。

    @zhujinliang 恩,我研究下这个思路。websocket库,在各平台下有比较著名的库么。。。

    @vibbow 求介绍轮子~能拿来就用最好了。。。
    ahtsiu
        5
    ahtsiu  
       2014-01-17 00:15:08 +08:00 via iPad
    zhxiaog
        6
    zhxiaog  
       2014-01-17 00:18:48 +08:00   ❤️ 1
    Pomelo应该就算吧,各种客户端都有。
    zhujinliang
        7
    zhujinliang  
       2014-01-17 00:21:43 +08:00
    为什么 不要 重复 造轮子

    注意一下有时候看起来很好的轮子不一定是适合自己的轮子

    我在做那个项目时,没有使用socket.io,用了websocket和自己封的一个http longpoll,因为我觉得socket.io太大了。使用我们浏览器界面的用户是普通访客(相对于客服),只给他用http longpull,js原生代码几十行就可以实现,我不想适配更nb的浏览器,更何况将来还要考虑兼容手机(让还停留在EDGE的人作何感想)。websocket是给PC客户端用的,原因上个回复里说了,这里我没重新造轮子(意思是没有自己撸出一个啥基于tcp或udp的协议)。
    同时由于没有用socket.io,我们在做windows客户端时也省的去探socket.io适配C#的坑了(大体搜了一下,貌似是有这种库)。

    话多了一些,就是想说明,不要一上来就看中哪个轮子,爱的不得了,弄不好最后它会坑你一下。
    话说我们为什么打算自己做这个项目,同类的也有很多,并且我们已经花钱购买服务在用了,想自己做,是因为有不少证据指示,那家服务出卖了我们的客户资料。。。
    teddy1004
        8
    teddy1004  
       2014-01-17 07:53:45 +08:00 via iPhone
    有一个新库叫 sockjs,比较轻量,也比socket.io 稳定
    ijse
        9
    ijse  
       2014-01-17 09:23:04 +08:00
    不如用XMPP协议,还能够兼容更多聊天工具。。

    有Node.js包的,https://github.com/node-xmpp/node-xmpp
    ql9075
        10
    ql9075  
       2014-01-17 09:39:22 +08:00
    ...node 这边这个字体颜色看起来好费力啊
    teavoid
        11
    teavoid  
    OP
       2014-01-17 11:07:46 +08:00
    初步研究了下pomelo,已经自带了一个分聊天室的demo,并且可自选使用websocket或socket.io,已经决定用pomelo了。感谢网易。
    Numbcoder
        12
    Numbcoder  
       2014-01-17 12:50:34 +08:00
    @teavoid 选 pomelo 没错的!
    notedit
        13
    notedit  
       2014-01-17 15:35:33 +08:00
    最近一直在用SSE 来做实时的应用 到现在都很美好
    teavoid
        14
    teavoid  
    OP
       2014-01-17 15:43:58 +08:00
    @notedit 请问下sse是神马?google了一下未果
    notedit
        15
    notedit  
       2014-01-17 15:48:20 +08:00   ❤️ 1
    @teavoid server side event 客户端叫 eventsource

    https://github.com/notedit/sseredis 我用的这个实现 api简单 基于http协议 很容易做负载均衡
    rangercyh
        16
    rangercyh  
       2015-01-27 17:41:48 +08:00
    @zhujinliang 能否请教一下nodejs的原生socket的tcp连接,我想问一下心跳该怎么设计和编写
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1516 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 23:55 · PVG 07:55 · LAX 15:55 · JFK 18:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.