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

因为公司需求要在安卓和 ios 客户端上做即时聊天系统,请问有什么好的解决方案?

  •  
  •   zerox · 2014-08-01 11:32:09 +08:00 · 14455 次点击
    这是一个创建于 3754 天前的主题,其中的信息可能已经有所发展或是发生改变。
    首先卡在了协议上,选择什么协议比较好呢,还是说自己设计一套呢?
    目前了解到的成熟的协议有XMPP和MQTT,感觉太重了;如果自己设计的话因为没有弄过,心里没底。
    然后是服务器端的选择,貌似跟协议的选择也有关系。

    假设同时在线10w吧,最好能扩容到100w,大家有什么比较成熟的解决方案吗?
    56 条回复    2016-02-25 19:22:15 +08:00
    hging
        1
    hging  
       2014-08-01 11:36:56 +08:00
    rails可以用faye啊什么的自己搞一搞
    hui
        2
    hui  
       2014-08-01 11:38:34 +08:00   ❤️ 1
    zerox
        3
    zerox  
    OP
       2014-08-01 11:44:22 +08:00
    @hui 看起来不错,先了解下,不知道靠谱否?可以的话我们更倾向于自己搞,可控性更强一些
    dingtianran
        4
    dingtianran  
       2014-08-01 12:26:31 +08:00   ❤️ 1
    https://layer.com
    这个还没有正式发布的,但是应该不错
    wgqzlj
        5
    wgqzlj  
       2014-08-01 12:35:52 +08:00
    ejabberd
    zhxhwyzh14
        6
    zhxhwyzh14  
       2014-08-01 12:56:09 +08:00
    微软lync?
    odirus
        7
    odirus  
       2014-08-01 13:09:08 +08:00   ❤️ 1
    几个月前也遇到了你同样的问题,现在已经做出来了,而且已经迭代多个版本。中间掉过太多的坑,不过通过搜索引擎和参考相关方面的书籍,一步一步从坑里爬起来了,所以如果自己开发,你要有足够的心理准备。我们选择HTTP + TCP(自己封装一层协议)的方式进行通信,这样可控性高一些,而且能够满足以后项目变化的需求。
    kisshere
        8
    kisshere  
       2014-08-01 13:58:07 +08:00 via Android
    html5 wensocket
    kisshere
        9
    kisshere  
       2014-08-01 13:58:27 +08:00 via Android
    html5 websocket
    joshuasui
        10
    joshuasui  
       2014-08-01 15:05:17 +08:00   ❤️ 1
    我是用了环信……http://www.easemob.com/index.php 用户免费的比较多 可以和2楼参照下
    joshuasui
        11
    joshuasui  
       2014-08-01 15:05:37 +08:00
    另外还有融云这个好像也不错……
    erylee
        12
    erylee  
       2014-08-01 15:27:06 +08:00
    @zerox,我是NexTalk.IM创始人,正在发布SLIMPP(Simple, Light Instant Messaging and Presence Protocol)协议,基于HTTP/MQTT面向移动设备和Web的即时消息协议。目前正在开发iOS, Android的SDK,完成后会开源在https://github.com/slimpp/slimpp,有兴趣可以一起参与进来...
    zerox
        13
    zerox  
    OP
       2014-08-01 15:35:46 +08:00
    @kisshere websocket客户端可以用吗

    @erylee 这个客户端可以用吗
    cevincheung
        14
    cevincheung  
       2014-08-01 15:45:14 +08:00
    其实所谓的推送[push]就是聊天
    robinlovemaggie
        15
    robinlovemaggie  
       2014-08-01 15:45:49 +08:00
    @zerox 做过一个类xmpp的客户端聊天,但是IM太泛滥了,根本流行不起来,累觉不爱……
    zerox
        16
    zerox  
    OP
       2014-08-01 15:47:52 +08:00
    @odirus 谢谢。你们使用的是什么方式来建立通信的呢?产品可以公开吗?另外可以推荐一下参考的书籍吗
    zerox
        17
    zerox  
    OP
       2014-08-01 15:48:32 +08:00
    @robinlovemaggie 你们服务器是用的什么?
    bjlbeyond
        18
    bjlbeyond  
       2014-08-01 15:53:37 +08:00
    你可以搜搜openfire,我们公司做了个即时聊天用的是这个
    odirus
        19
    odirus  
       2014-08-01 15:54:56 +08:00
    @zerox 采用TCP + HTTP的方式进行通信,产品我也不知道能否公开。。。我肿么没发现私信这个功能
    odirus
        20
    odirus  
       2014-08-01 16:02:49 +08:00
    @zerox 如果觉得有必要的话,可以留下邮箱,我可以把我的方案、思路和遇到的一些坑给你描述一下,不求回报,只求当你以后设计了更NB的系统之后也能交流交流。目前已经做成集群,在下一大版本演进之前还是有瓶颈之处,不能无限扩容。
    railgun
        21
    railgun  
       2014-08-01 16:12:53 +08:00
    同时在线能有个5w就吊炸天了
    railgun
        22
    railgun  
       2014-08-01 16:13:45 +08:00
    @bjlbeyond openfire是xmpp的服务端实现,xmpp不是个好东西,至少是应该被时代抛弃的东西
    xujialiang
        23
    xujialiang  
       2014-08-01 16:27:08 +08:00
    xmpp坑好多。。。。。。。。。。。
    xujialiang
        24
    xujialiang  
       2014-08-01 16:28:37 +08:00
    @odirus 请教下你们的方案 [email protected]
    qiayue
        25
    qiayue  
       2014-08-01 16:28:59 +08:00
    xiasix
        26
    xiasix  
       2014-08-01 16:45:18 +08:00
    @odirus 也 请教下你们的方案 邮箱 oofl#163.com

    我们 也有这个需求 当时也调研了很久 java的话 就是 openfire+xmpp
    我就会php 我用的nginx长连接+php http get post +腾讯的推送信鸽实现的

    后来 主打聊天和通讯 直接选go语言 socket实现 十月份上线 一边自学go 一边写 到时候 我分享分享 哈哈哈
    erylee
        27
    erylee  
       2014-08-01 17:15:13 +08:00
    @zerox websocket版本已经商用很多年, 架构 http://nextalk.im/tech
    erylee
        28
    erylee  
       2014-08-01 17:16:56 +08:00   ❤️ 1
    @railgun XMPP肯定是不适合手机端,协议臃肿复杂、难以集成和扩展
    erylee
        29
    erylee  
       2014-08-01 17:19:52 +08:00
    @joshuasui 环信是XMPP上套了一层API...
    odirus
        30
    odirus  
       2014-08-01 18:25:26 +08:00
    @xujialiang 好的,晚上发
    @xiasix 好的,晚上发
    jucelin
        31
    jucelin  
       2014-08-01 18:42:48 +08:00 via Android   ❤️ 1
    huiyi.csdn.net/activity/product/goods_list?project_id=1255 CSDN在线培训——APP即时通讯功能开发实战讲座。这个可以听一听。
    regent
        32
    regent  
       2014-08-01 18:56:08 +08:00 via iPhone
    华为 espace 解决方案
    regent
        33
    regent  
       2014-08-01 18:56:50 +08:00 via iPhone
    抱歉 没有仔细看清 是内嵌聊天而不是单独im
    zerox
        34
    zerox  
    OP
       2014-08-01 19:54:59 +08:00
    @odirus [email protected] 期待来信,多谢。
    mailworks
        35
    mailworks  
       2014-08-01 20:59:49 +08:00
    我们公司正在做IM解决方案,我是负责iOS端的,公司用的是自定义的二进制协议(HTTP + TCP(Socket))服务器端不是很了解只知道是Java写的
    Email
        37
    Email  
       2014-08-01 21:30:13 +08:00
    做IM就一个重点. 消息一条都不能丢....
    我觉得选Mqtt挺好的, 不然...呵呵, 开发周期过完你们的产品都死了.

    http://www.eclipse.org/paho/
    qwong
        38
    qwong  
       2014-08-02 00:27:17 +08:00   ❤️ 1
    MQTT不了解, XMPP真心不适合做移动端, 天生一个缺点就是报文太大, 浪费客户端流量.
    如果有牛人有相关经验, 可以考虑自己开发协议, 否则最好还是用现成的开源的吧. 可以先基于开源软件简单快速的开发完上线, 后面再逐步优化.

    如果一定要选XMPP协议, 会erlang的话选择ejabberd, java可以选择openfire, 也可以考虑tigase之类的, 资料相对少一些.
    openfire优化一下撑10w在线没问题的, 不过还是有很多坑...特别是集群那一块.

    其实最好的办法就是挖人啦, 不过这年头挖人也不好挖啊.
    pljhonglu
        39
    pljhonglu  
       2014-08-02 08:55:03 +08:00 via iPhone
    使用现有协议开发都有现成的三方库可用,可以快速开发。自定义协议那就要自己去封装,包括服务器端,开发成本较高,看需求啦。个人认为先敏捷开发做出来再说,等到用户真的达到那么多了再考虑后续…因为目前im已经死了一批又一批啦。
    robinlovemaggie
        40
    robinlovemaggie  
       2014-08-02 09:19:42 +08:00
    @zerox 我们公司有自己的机房,Linux 和Unix都用。
    teavoid
        41
    teavoid  
       2014-08-02 10:27:19 +08:00
    我跟你一样的需求,我用的网易的pomelo框架(nodejs)实时聊天的后台,优点是支持分布式部署,iOS和android端都有开源实现,不过坑确实蛮多的。
    不过我没有用pomelo来自己做推送,而是用的baidu的push通道。因为考虑push要维持长连接,就直接用的百度的,减少服务器压力。
    ant_sz
        42
    ant_sz  
       2014-08-02 10:39:58 +08:00
    parse.com 这样的云服务有提供实时聊天功能的 API 和 SDK
    fark
        43
    fark  
       2014-08-02 11:26:09 +08:00
    协议选来选去就要看花眼了
    另外要是能保证足够的初期使用人数,感觉maidsafe挺不错的
    zerox
        44
    zerox  
    OP
       2014-08-02 12:33:41 +08:00
    @teavoid 我也正在搭它的demo,感觉文档不详细
    san3ye
        45
    san3ye  
       2014-08-02 13:58:28 +08:00
    反正XMPP是个大坑。。
    blueware
        46
    blueware  
       2014-08-02 15:34:24 +08:00
    如果是在app内嵌代码实现IM功能的话,我推荐用环信。环信团队的人都是在通信领域奋斗多年的专家,他们的产品质量很不错: http://www.easemob.com/


    [利益不是很相关],环信的天使和我们A轮是一个投资方,都是matrix partner中国
    hjiang
        47
    hjiang  
       2014-08-04 11:13:47 +08:00
    我是 AVOS Cloud 的 CEO,我们的实时消息服务二楼已经推荐过了: https://cn.avoscloud.com/features.html#/slide-2

    我们使用的是 WebSocket 之上自定义的协议,效率非常高,并且 API 也足够灵活,可以满足不同场景的需求。服务推出几个月后目前平台上比较大的单个 app 同时在线用户数已经近百万了,一直很稳定。架构上横向扩展也很容易。

    另外由于我们还提供免费的推送服务,所以两者是无缝集成的,离线的用户也可以收到消息。

    如果和我们的统计分析和数据存储等服务结合起来用,还可以省掉你很多其他事情。
    hjiang
        48
    hjiang  
       2014-08-04 11:17:57 +08:00
    忘了说,因为是基于 WebSocket,所以可以支持任何平台,目前我们提供了 iOS 和 Android 的 native SDK,未来会发布 JS、Unity、Windows Phone 的 SDK,也会开放服务器端接口给使用其他语言和平台的用户。当然开放服务端接口细节也意味着要是你有一天想自己做个服务把我们替换掉也是可以的。
    stefanie924
        49
    stefanie924  
       2014-08-04 15:03:17 +08:00
    @odirus 请教下你们的方案,谢谢 [email protected]

    BTW: 由于openfire集群的问题,我们换到ejabberd了,但一直想要着手自定义协议来实现,还没得及,希望能得到你们的宝贵经验,再次谢谢
    djyde
        50
    djyde  
       2014-08-04 23:30:25 +08:00
    socket+webview
    flysnowxf
        51
    flysnowxf  
       2014-08-18 12:07:31 +08:00
    @hjiang 我这边也正在使用你们实时通信的功能,主要遇到了2个问题一直卡着,一个是iOS接收不到离线消息(比如app切换到后台就收不到了,下载了你们的demo也有这个问题),另一个是iOS和Android不能相互通信。问题也在群里和用户反馈中提出了,没得到有效的解答。在这里冒昧能帮我们联系一个工程师解答一下吗?
    arielyang
        52
    arielyang  
       2014-11-19 23:22:29 +08:00
    竟然只有一位提到 融云 http://rongcloud.cn ~~
    arielyang
        53
    arielyang  
       2014-11-19 23:30:16 +08:00
    我是融云的。市面上第三方服务,真正有模有样的也就融云和环信,LeanCloud 产品不错,但是算是 Real-time Communication,还算不上 Instant-messaging。也就是说是做得比较底层的通讯,还没有 IM 的主要业务逻辑,还是需要开发者自己做大量工作的。环信采用的开源客户端和服务器搭建的,虽然做了大量二次开发,但还是有较多坑的,宕机那是经常的,甚至出现过宕机半天的情况。另外 XMPP 协议,流量电量、移动互联网下的消息可靠性,那懂的朋友都知道。
    q84629462
        54
    q84629462  
       2015-02-20 18:01:17 +08:00
    @arielyang 融云的web sdk,聊天室无法通信,切换到客服就可以通信
    web发送聊天室信息报sendMessage.onError UNKNOW ERROR 1
    在融云网站的api调试页面发送聊天室信息也没办法接收到
    Feiox
        55
    Feiox  
       2016-02-25 18:58:20 +08:00
    @odirus 最近被聊天、推送相关业务困扰,请问您的这些资料还有吗?能不能发我一份呢?万分感谢。。。 My mail fei2037 艾特 gmail.com
    odirus
        56
    odirus  
       2016-02-25 19:22:15 +08:00
    @Feiox 资料啊?除了语音通话、视频通话正在开发外,其他都完成了。但只有 API 文档了,要不你在马化腾上练习我把。已发邮件。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2637 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 03:45 · PVG 11:45 · LAX 19:45 · JFK 22:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.