Ruby xmpp 服务器 vines

mobiwolf · 2013年03月07日 · 最后由 flowerwrong 回复于 2015年08月25日 · 8232 次阅读

hi,请教一下大家关于 vines。 我们想做一个垂直化的 im,类似微信的工具。大约总用户量 150W,同时在线大约是 10W+ 的水平,我们有两台云主机可以用。

我们知道最好的 xmppserver 是 ejabberd,但是我们团队对 erlang 不熟悉,就招 ruby 的 server。找到了http://www.getvines.com 不知道大家有没有人用过。靠谱吗?

客户端目前就只有手机~~

研究过源码 个人觉得 vines 有点简陋 不好横向拓展 也许是小弟才疏学浅...

@zj0713001 接着请教:您说的横向扩张指的服务器规模的增长吗? 我们就是做一个类似微信的东西,能正常发消息,以及自动发消息。 语音文件录制压缩好之后,我们上传到云存储里,然后把下周链接自动发送到正在聊天的对象那边,然后客户端获取自动下载语音文件。

能适应几万人在线就差不多够启动时的规模了。 主要是没见过有人用过

ejabberd 搞不定那就搞 java 的吧,openfire,这个应该比较大众化吧 http://www.igniterealtime.org/projects/openfire/ 当年还是 j2me 时代的时候就用它来做过 xmpp 服务端,plugin 的机制做扩展也比较方便

ejabberd 可以跑起来,就是跑后面定制开发的时候郁闷呢

@alucardpj ejabberd 可以跑起来,就是跑后面定制开发的时候郁闷呢

#5 楼 @mobiwolf erlang 搞不定搞 java 总简单些吧,openfire 用下来感觉还行,但是当时没到你们这么大的量级,不知道你们机子吃不吃得消。建议看看。

@alucardpj 我们估计也那么高,不过评估负载的时候,我们还是比较保守,往高估了估。你们当时做的同时在线多少人呢?

#7 楼 @mobiwolf 不好意思,我们当时顶多也就几千在线,后来项目就黄掉了。由于负载低当时单服务器就够了。不过你 10w 同时在线的话两台机子肯定不够,xmpp 是长连接,两台云主机 socket 口也不够用啊。 openfire 可以用 connectionmanager 来平衡负载,将连接平衡到多台机子上去,也支持 cluster 集群,做分布式应该可以。但你这个量级个人感觉两台机子肯定是不够的。

#4 楼 @mobiwolf 真的,相比之下 Ejabberd 是最容易定制的...

@alucardpj 恩,我们刚开始是两台,慢慢随着用户增加,我们再增加机器数量。我们做的是特殊文字人群的用户。

@bhuztez 我看大家都对 ejabberd 比较有喜感,只是我们团队没有人熟悉 erlang,只是能配置起来环境,数据库用的是 postgresql,我们跑了跑,看了看效果。它的插件都是从代码级介入,需要编译成 beam。目前优先级最高的是 ejabberd,一旦我们解决不了,那么就从 openfire 和 vines 中选择出来一个用。

#11 楼 @mobiwolf 都是 Java 写的,OpenFire 其实不如 Tigase...

@bhuztez 主页上看到这两句Cluster with over 1mln online users. 500k online users on a single machine. 貌似很霸气,但是好像用的人少。国内有商用的吗?

#13 楼 @mobiwolf 你别管别人用啥。首先是你的需求到底是啥?从方便定制的角度讲首选 Ejabberd,其次选 Tigase...

@bhuztez 恩,说的是。非常感谢你的建议,btw,如何对 ejabberd 这样的东西做负载测试呢?有没有现成的工具?

#2 楼 @mobiwolf 不是 我说的横向拓展是功能拓展 就比方说你上传的这个功能 就不好做...

#15 楼 @mobiwolf 直接用 XMPP 客户端连上去有问题?

@bhuztez 没有问题啊,直接就连上去了。但是要做成类似微信的功能,我们还需要解决新用户自动回复,属性扩展,加位置坐标,录音上传(这个倒是和 xmpp 没关系,用 http 传上去就行。)等,这些功能应该需要写 erlang 吧

#19 楼 @mobiwolf 我觉得你还是别简单地说和微信类似。还是把功能点一个个列下来,不走 XMPP 的不管。需要走 XMPP 的,对照 Ejabberd 支持的协议http://www.process-one.net/en/ejabberd/protocols/,把没有支持的拿上来讨论吧。

Erlang 真的是一门很容易上手的语言...

@bhuztez 恩,好的。

@mobiwolf 楼主最终使用了什么呢?

#7 楼 @mobiwolf #18 楼 @bhuztez 请教下 ejabberd 的问题,病急投医

1. 如何实现只有好友关系才能聊天?(默认可以任意聊天)
2. 如何实现群聊?(XEP-45 定义的群聊当群成员下线后会自动退出群)

😄

需要 登录 后方可回复, 如果你还没有账号请 注册新账号