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

2014-01-16 22:45:34 +08:00
 teavoid
需求是:
1、多人的群聊
2、支持文字,图片,语音和视频
3、客户端是iOS & android app

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

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

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

@vibbow 求介绍轮子~能拿来就用最好了。。。
ahtsiu
2014-01-17 00:15:08 +08:00
zhxiaog
2014-01-17 00:18:48 +08:00
Pomelo应该就算吧,各种客户端都有。
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
2014-01-17 07:53:45 +08:00
有一个新库叫 sockjs,比较轻量,也比socket.io 稳定
ijse
2014-01-17 09:23:04 +08:00
不如用XMPP协议,还能够兼容更多聊天工具。。

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

https://github.com/notedit/sseredis 我用的这个实现 api简单 基于http协议 很容易做负载均衡
rangercyh
2015-01-27 17:41:48 +08:00
@zhujinliang 能否请教一下nodejs的原生socket的tcp连接,我想问一下心跳该怎么设计和编写

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

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

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

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

© 2021 V2EX