IM 开源项目 登录服务器 <1>

 

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)	
	UInt64		m_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)	
	UInt64		m_ui64UID;				//	用户ID
	SInt64		m_i64CrtTime;				//	创建时间
	UInt16		m_ui16KeyLen;				//	Key长度
	SInt16		m_i16SvrID;				//	当前登录服务器ID
	char		m_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)	
	UInt64		m_ui64UID;							//	用户ID
	SInt16		m_i16PassWordLen;							//	密码长度
	char			m_szPassWord[50];						//	密码
	SInt8		m_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)	
	UInt64		m_ui64UID;							//	用户ID
	SInt8		m_i8LogRet;							//	登录结果
	SInt16		m_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)	
	UInt64		m_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)	
	 UInt64		m_ui64ApplicaterUID;						//	提出申请的用户ID
	 UInt16		m_ui16ApplLocalPort;						//	提出申请的用户本地端口
	 UInt64		m_ui64DestUID;							//	目标用户
	 ULong		m_ulWanIP;							//  	会话发起人地址
	 UInt16		m_ui16WanPort;							//	会话发起人Port
 };

 /*****************************
[ID:10006] 打洞应答
 ******************************/
 struct STRU_P2P_UDP_HOLES_RS
 {
	 DEF_PACK_FUCREF_ID(STRU_P2P_UDP_HOLES_RS, DEF_P2P_UDP_HOLES_RS)	
	 UInt64		m_ui64RSerUID;							//	回应者UID
	 UInt16		m_ui16RSerLocalPort;						//	回应着本地端口
	 UInt64		m_ui64ApplicaterUID;						//	申请者
	 UInt16		m_ui16ApplLocalPort;						//	提出申请的用户本地端口
	 ULong		m_lWanIP;								// 	会话应答人地址
	 UInt16		m_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)	
	 UInt64		m_ui64LocalUID;							//	本地用户ID
	 UInt64		m_ui64DestUID;							//	目标用户ID
	 UInt16		m_ui64DestLocalPort;						//	目标用户本机端口
 };


 

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
c 实现的开源 IM 系统是指使用 C 语言来开发的开源即时通讯系统。C 是一种高性能、低开销的编程语言,适合编写底层网络通信和系统级别的软件。下面将介绍一个使用 C 实现的开源 IM 系统:MongooseIM。 MongooseIM 是一个基于 XMPP(可扩展通信和表示协议)的开源 IM 系统,使用 C 语言进行开发。它的主要目标是提供可靠、高性能和可扩展的 IM 解决方案。MongooseIM 支持它能够在高负载情况下处理数万个并发用户,它具有横向扩展的能力,可以方便地扩展到更多的用户和服务器。 MongooseIM 的特点包括: 1. 可靠性和稳定性:它使用了高效的内存管理和多进程架构,确保系统的稳定性和可靠性。 2. 高性能:MongooseIM 提供了高性能的消息传递机制,支持实时消息的发送和接收。 3. 可扩展性:系统可以水平扩展,支持集群和负载均衡,可以轻松地扩展到数万个并发用户。 4. 安全性:MongooseIM 支持多种身份验证机制,包括用户名/密码、OAuth 和外部身份验证机制,确保用户数据的安全性。 5. 开放性和可定制性:MongooseIM 遵循 XMPP 协议,具有开放的标准,可以与其他支持 XMPP 的 IM 系统进行互操作。同时,开发者也可以根据自己的需求定制和扩展 MongooseIM。 总之,C 实现的开源 IM 系统 MongooseIM 是一个适用于大规模、高负载场景的高性能、可靠和可扩展的 IM 解决方案,具有安全性和定制性。它为开发者提供了一个功能强大的基础平台来构建自己的 IM 系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值