zoukankan      html  css  js  c++  java
  • 聊天服务的设计随想

    聊天系统

    对于互联的多用户在线游戏,聊天是不可少的。

    聊天的类型

    这里分类是按用户的多少来分类。

    单点类型

    很简单如Skype(QQ)那样,你可以和好友,一对一的在线聊天。

    多点类型

    如Skype,可以自由组织群聊。

    现有的几个开源方案

    ejabberd

    ejabberd(基于Jabber/XMPP协议的即时通讯服务器)是Gameloft现在非常废柴的聊天系统。从开源角度,ejabberd似乎是一款不错的聊天替代品。

    优点

    1. 跨平台,容错,集群和模块化.
    2. 容易拓展(轻松的50行用户认证插件代码就集成到现有平台)。
    3. 分布式, 容错, 并基于开放标准的实时通讯系统.
    4. 功能服丰富的XMPP服务器.
    5. 同时适合小规模布署和超大规模布署, 无论它们是否需要可伸缩性.

    缺点

    1. 对于移动互联网来说,Jabber/XMPP非常臃肿。(以前公司的分布式聊天平台中当群聊到50人时就非常吃力了)
    2. 部署麻烦。
    3. 维护性差,维护难度大。

    openfire

    Openfire 采用Java开发,开源的实时协作(RTC)服务器基于XMPP(Jabber)协议。优点是易用安装使用,还提供WEB管理工具。

    Jabber/XMPP的弊端

    对于移动互联网环境来说,XMPP是臃肿的,实践中表现并非尽人意,延迟,群聊用户支持的用户不多。 从客户端来讲,更为耗电,消息处理延迟,并发量不大。

    轻巧的MQTT

    MQTT(Message Queuing Telemetry Transport) 是IBM开发的一个即时通讯协议。

    优点

    1. 对移动端友好,省电,每秒请求量更为客观。
    2. 协议轻巧,通信的内容协议自由组织。

    缺点

    1. 现有的开源实现不多,需要花费些时间实现。

    架构设计实现

    HTTP协议

    JOIN group

    POST group/<group-name>/join
    group-name: 这是需要加入聊天的组名
    username: 用户名
    token: 用户令牌

    如果用户成功加入,将会返回http状态200及内容:

    {
        "chat_host": 1234
        "port" : "",
        "name": "",
        "id" : ,
        "users" : {
            ""
        }
    
    }
    

    为连接聊天室的域名和端口

    如果加入失败返回500状态码和内容:

    Room full
    

    CHAT MESSAGE Protocal

    client向server发送的命令协议比较简单,使用行指令。空格分隔,第一个单词为指令。

    GET group datetime

    group: 是订阅组消息
    datetime: 是用户上次获取消息的时间,如果超过服务的限制会返回过去五分钟的消息。

    得到到回复:

    ok:1034
    
    [{'msg': 'hello group' 'from' : 'user_id', datetime: '2014-08-11 12:12:123', ...},
    {'msg': 'hello group' 'from' : 'user_id3', datetime: '2014-08-11 12:12:123', ...},
    ...
    ]
    

    协议头行为状态和内容长度,以英文冒号分隔。

    如果失败,将返回错误信息文本:

    error:100
    
    Unknow error
  • 相关阅读:
    Object: Date对象——时间的设置和返回
    CSS基础知识-常用属性(updating)
    图像
    一些基础名词及含义(更新中)
    HTML常用元素合集(更新中)
    HTML小贴士-tips1
    HTML&CSS基础(一):基本格式(更新中)
    vue 轮播图显示三张图片,图片居中显示
    移动端 rem自适应布局 (750的设计稿)
    vue axios 在ios 中不执行回调(vconsole中status为0)
  • 原文地址:https://www.cnblogs.com/nagi/p/4191449.html
Copyright © 2011-2022 走看看