IM 开源项目 登录服务器 <1>
来源:互联网 发布:象棋残局软件 编辑:程序博客网 时间:2024/04/30 22:09
1. 协议
l 客户端/服务端(C/S): UDP
l 服务端/服务端(S/S): UDP/TCP
2. 网络模型
l Windows: 完成端口
l Linux: Epoll 暂不提供
3. 性能参数
l 最大连接数: 100000 IDs / 每台
l 最小带宽要求: 1Mb(byte) / 每台
l 最大连通时间: 30s / 每次
1. 服务器集群设计
登录服务,采用服务集群方式,由多台“登录服务器”和单台“登录中心服务器”构成,分布情况如下。
l 登录服务器
a. 用户登录交互(账号数据库)。
b. 提供动态密钥生成。
c. UDP打洞(定义协议,各服务器均可以集成次服务)。
d. 更新,缓存用户状态,登录参数(eg:密钥)等, 并周期性上报中心服务器。
e. 用户状态(在线状态,心情等需实时通知的信息)推送(可能存储)。
f. 用户详细信息查询(账号数据库)。
g. 用户关系增、删、改、查。
h. 连接用户关系数据库
(横向分表 最大好友数*最大记录数 200*100000帐号关系数据库)。
i. 用户积分上报(eg: 统计一次上下线间在线时常 积分数据库)。
(… 视具体情况再添加功能)
l 登录中心服务器:采用单台服务(考虑到安全性, 后续可能增加代理或主从方式)
a. 缓存所有用户状态参数。
b. 缓存登录服务器参数(状态,连接参数,密钥)。
c. 提供用户归属登录服务器查询。
(… 视具体情况再添加功能)
4.1用户登录交互
4.1.1 登录流程
4.1.2 登录时序
4.1.3 登录协议包
/*****************************[ID:5001(DEF_SVR_LOGIN_MIN + 1)登录KEY请求******************************/struct STRU_SVR_LOGIN_KEY_RQ{DEF_PACK_FUCREF_ID(STRU_SVR_LOGIN_KEY_RQ, DEF_SVR_LOGIN_KEY_RQ)UInt64m_ui64UID;//用户ID};/*****************************[ID:5002(DEF_SVR_LOGIN_MIN + 2)登录KEY应答******************************/struct STRU_SVR_LOGIN_KEY_RS{DEF_PACK_FUCREF_ID(STRU_SVR_LOGIN_KEY_RS, DEF_SVR_LOGIN_KEY_RS)UInt64m_ui64UID;//用户IDSInt64m_i64CrtTime;//创建时间UInt16m_ui16KeyLen;//Key长度SInt16m_i16SvrID;//当前登录服务器IDcharm_szKeyBuf[50];//Key};/*****************************[ID:5003(DEF_SVR_LOGIN_MIN + 3)登录KEY请求******************************/struct STRU_SVR_LOGIN_RQ{DEF_PACK_FUCREF_ID(STRU_SVR_LOGIN_RQ, DEF_SVR_LOGIN_RQ)UInt64m_ui64UID;//用户IDSInt16m_i16PassWordLen;//密码长度charm_szPassWord[50];//密码SInt8m_i8LogState;//登录状态};/*****************************[ID:5004(DEF_SVR_LOGIN_MIN + 4)登录KEY请求******************************/struct STRU_SVR_LOGIN_RS{DEF_PACK_FUCREF_ID(STRU_SVR_LOGIN_RS, DEF_SVR_LOGIN_RS)UInt64m_ui64UID;//用户IDSInt8m_i8LogRet;//登录结果SInt16m_i16SvrID;//服务器实例ID};4.1.4 心跳
反射方式: 客户端周期发送,服务器端反射./*****************************[ID:5005(DEF_SVR_LOGIN_MIN + 5) 存活通知******************************/struct STRU_SVR_LOGIN_LIVE_ID{DEF_PACK_FUCREF_ID(STRU_SVR_LOGIN_LIVE_ID, DEF_SVR_LOGIN_LIVE_ID)UInt64m_ui64UID;//用户ID};
4.1.5 密钥
服务器生成密钥,对称加密。
4.2 UDP打洞
4.2.1 打洞流程
4.1.6 打洞协议包
/***************************** [ID:10005] 打洞请求 ******************************/ struct STRU_P2P_UDP_HOLES_RQ { DEF_PACK_FUCREF_ID(STRU_P2P_UDP_HOLES_RQ, DEF_P2P_UDP_HOLES_RQ) UInt64m_ui64ApplicaterUID;//提出申请的用户ID UInt16m_ui16ApplLocalPort;//提出申请的用户本地端口 UInt64m_ui64DestUID;//目标用户 ULongm_ulWanIP;// 会话发起人地址 UInt16m_ui16WanPort;//会话发起人Port }; /*****************************[ID:10006] 打洞应答 ******************************/ struct STRU_P2P_UDP_HOLES_RS { DEF_PACK_FUCREF_ID(STRU_P2P_UDP_HOLES_RS, DEF_P2P_UDP_HOLES_RS) UInt64m_ui64RSerUID;//回应者UID UInt16m_ui16RSerLocalPort;//回应着本地端口 UInt64m_ui64ApplicaterUID;//申请者 UInt16m_ui16ApplLocalPort;//提出申请的用户本地端口 ULongm_lWanIP;// 会话应答人地址 UInt16m_i16WanPort;//会话应答人Port }; /*****************************// [ID:10007] 通道保持通知 ******************************/ struct STRU_P2P_UDP_CH_MAINTAIN_ID { DEF_PACK_FUCREF_ID(STRU_P2P_UDP_CH_MAINTAIN_ID, DEF_P2P_UDP_CH_MAINTAIN_ID) UInt64m_ui64LocalUID;//本地用户ID UInt64m_ui64DestUID;//目标用户ID UInt16m_ui64DestLocalPort;//目标用户本机端口 };
- IM 开源项目 登录服务器 <1>
- IM 开源项目 登录服务器 基础表结构<2>
- 常见的IM开源服务器
- 一个IM开源项目LiteTalk
- IM开源项目 壮士征集贴
- IM 开源项目(01 序)
- 开源的 IM 项目 Sealtalk
- 初步测试IM开源项目:TeamTalk
- 常用开源Jabber(XMPP) IM服务器介绍
- 常用开源Jabber(XMPP) IM服务器介绍
- 常用开源Jabber(XMPP) IM服务器介绍
- 常用开源Jabber(XMPP) IM服务器介绍
- 常用开源Jabber(XMPP) IM服务器介绍
- 常用开源Jabber(XMPP) IM服务器介绍
- IM开源项目分析 同事收集整理
- IM 开源项目 客户端UI框架 Direct UI
- IM 开源项目 客户端UI框架 Direct UI(01)
- android的开源电话/通讯/IM聊天项目全集
- UISearchDisplayController 的使用
- 量子系统环境调控首次实现
- vi/vim编辑器必知必会
- 有用的Web或者手机UI设计工具
- union
- IM 开源项目 登录服务器 <1>
- Ejabberd MUC的配置
- dependent scope
- 收起浮躁
- android启动认识
- Android成长之路-HelloWorld项目详解
- mysql问题以及解决方法
- Linux下删除大量文件error : bash: /bin/rm: Argument list too long
- Cisco Packet Tracer12…………不同的配置模式