zoukankan      html  css  js  c++  java
  • 百万级即时通讯系统服务器框架

    1概述

    引用一段网上的描述:“InstantMessaging(即时通讯、实时传讯)的缩写是IM,这是一种可以让使用者在网络上建立某种私人聊天室(chatroom)的实时通讯服务。目前在互联网上受欢迎的即时通讯软件包括QQ、百度HI、新浪UC、MSN Messenger等。“

    2服务器端

    2.1系统框架

    下面所有服务器组件:

    内存DB:主要存储人员状态,服务器负载信息

    人员信息

    人员ID

    人员状态

    所在逻辑服务器IP

    所在逻辑服务器port

    1

    在线

    192.168.1.12

    1111

    2

    在线

    192.168.1.11

    1111

    服务器信息

    服务器ID

    服务器类型

    内部通信IP

    内部通信器port

    外部IP

    外部PORT

    当前负载

    最大负载

    1

    1

    192.168.1.12

    1111

    192.168.1.12

    1111

    3

    300

    服务器类型:

    1 代表逻辑服务器

    2 代表音视频

    3 代表聊天服务器

    4 代表群聊服务器

    中心服务器 主要功能维护每个单独服务器的状态,以及即时调整负载,并且清理内存DB服务器负载信息等等

    DBServer、DB(做负载)以下为简图

    DB使用负载服务器具体方案待定。

    主要功能处理登录时候拉去信息的压力,缓解DB读取和存入压力。

    OfflineMsgDBserverr、DB(做负载)以下为简图

    DB使用负载服务器具体方案待定。

    主要功能存入离线消息和拉去离线消息,缓解DB读取和存入压力。

    登录网关服务器

    主要是每个客户端第一次连接后返回一个逻辑服务器,没有其他逻辑。并发很大,这个都是短连接。登录网关的的逻辑负载通过内存db获得 ,没30苗调整一次。

     

    逻辑服务器

    主要处理登录和聊天等

    1.      登录过程

    客户端从网关服务器获得逻辑服务器IP和PORT。发送登录消息,内存数据通过相应算法找到压力较小DBserver获取登录信息。然后返回给客户端组织结构,并且向fflineMsgDBserver发送获取离线消息。最后想内存DB更新人员状态以及所在服务器信息。

    2.      聊天消息(跨服务)

    用户1 登录在逻辑服务器A上

    用户2登录在逻辑服务器B上

    用户1发起聊天发送到 逻辑A服务器上,逻辑服务器A通过内存DB找到用户2所在服务如果未找到 ,作为离线消息。如果找到向相应服务器发送消息。并且转发到用户2手上。

    聊天服务器、群组服务器等基本逻辑相同

    用户1 登录在逻辑服务器A上

    用户2登录在逻辑服务器B上

     

           用户1发起聊天  通过逻辑服务器A找到一个聊天服务 发送给用户1。用户1发送消息到聊天服务器,聊天服务器通过内存DB找到用户B信息发送到逻辑服务器B上。用户B收到消息。并且连接到同一个聊天服务器上配对。至此两个用户全部拉到一个服务器上了。

     

    图片服务器:略

    音视频服务器:

    原则上能用P2P绝对用P2P,不能点对点的。走聊天的类似流程完成把两个用户拉到一个服务器上!!

  • 相关阅读:
    Python+selenium常见报错
    jmeter压力测试指标解释
    jemte自动生成测试报告方法
    iview清空Date-picker组件后请求报错解决方法
    【求助】Django+vue项目时候遇到一个问题,table的data数据怎么更新
    django_数据库操作—增、删、改、查
    django-关于manage.py migrate无效的问题
    python家里的环境和公司环境怎么同步
    python class类的属性应用及init初始化实践 ---勇者斗恶龙
    IDLE与pycharm执行相同代码结果却不同,原因分析
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13318655.html
Copyright © 2011-2022 走看看