新闻中心新闻详情
聊天系统设计-看上去简单,但实际上需要极高成本
2020-11-13 | 内容资讯

通信,从广义上来讲,社交、游戏、直播、短视频中有通信;协同办公、视频会议、在线教育、远程医疗、智能安防、呼叫中心中也有通信;CRM、ERP、工业互联网、智能硬件的系统架构,依然离不开通信能力。通信已经植入每一处行业应用场景,正在渗透到工作及生活的方方面面。

今天就来聊一聊游戏/直播中的即时通信,想必每个玩过联网游戏(或者看过直播)的小伙伴们都知道游戏/直播内会有一个聊天功能,那么我们来扒一扒这个看似简单的聊天功能。

1.私聊消息(P2P)

私聊消息:私聊的特性是聊天对象有着非常明确的目标,即 A 到 B 两个玩家之间单向的消息传递,服务器在转发这类消息的时候只需要找到特定的玩家把消息丢过去就可以。

2.广播消息

广播消息:在游戏世界频道/王国下,发一条消息广播给所有人,这样大家就好像都在一个屋子里互相都能看到对方的发言。

这种聊天室的工作模式可以用下面这张图来表示,一般我们实现这类功能只要服务器收到消息之后把消息分发到所有客户端上就可以了,服务器上只需要维护一张全局用户表就可以。

难点1:当用户数比较多时,比如有1亿的用户,如何保证服务器在同一时间将数据全部推送出去;

难点2:当用户分布在全球时,如何快速找到在线用户,以保证数据的实时性

3.群组消息(group)

群组聊天:这个系统目前可以让玩家可以互相自由的聊天了。但是我们知道游戏通常是一组玩家(或者是一个国家的玩家)和另一组人会发生战斗,于是聊天系统就需要增加群组功能,大家可以选择加入到不同的群组(或者联盟/频道)进行聊天。

而群组与全局聊天的用户列表不同的是,在群组中只有有限的玩家。群组通常是由固定的用户组成的,用户下线后不会退出群组,这种聊天模式可以用下面的图来表示。

应用场景:游戏中的联盟,微信/钉钉中的群组,在线教育中的小班课

难点:服务器能否支持无限群组?群组内能容纳多少成员?在上述情形下导致的消息大规模分发,对服务器的高并发以及高性能是一种考验。此外还有群组的历史消息获取以及消息保存以及流量暴增带来的动态扩容问题。

4.房间消息(room)

房间聊天:与群组的区别是,房间不是由固定用户组成的,用户可以随意加入或退出,用户在离线后会自动退出房间,离线的用户不能获取房间历史消息。

应用场景:游戏中的匹配对战,或者直播中的李佳琦/薇娅直播间,在线教育中的公开课

难点:当房间中有100个用户同时在线,其中一个人说了一句话,要将这一句话发给100名玩家,这是100条消息量。如果这100个人在房间里都说了一句话,就要发送 100* 100 一共 1W 条的消息。

而当房间用户数达到100万时,一条消息需要同步分发100万次,如果其中1万用户参与了互动,也就意味着将同时分发100亿条消息。如此高的业务并发压力,对系统架构是个难题。除此之外,还需要保证消息传递的时间,即实现全球范围实时送达,这种高性能高并发的要求,并非所有的系统都能支持。


5.多点登录

多点登录:指用户在多个设备上同时登录时,多个设备都可以收到消息且无延迟。


使用场景:微信/钉钉等应用在手机和电脑同时登录时,终端都可以收到消息。

难点:在多端登录时,保证多端消息通知无延迟,需系统设计时支持多点登录,做到无延迟消息推送


基于上述问题,云上曲率为企业客户提供了一套专业的即时通讯SDK,可以帮助应用实现以下功能:用户登录;黑名单管理;好友管理;群组和房间管理;消息发送,包括 P2P 消息、群组消息 、房间消息以及广播消息;消息回调;多点登录;强制用户下线在内的扩展功能;使项目能够专注于自身的产品和业务逻辑,加快业务的开发效率。您可以访问www.ilivedata.com官网注册试用。


微信公众号
更多资讯干货
敬请关注:
云上曲率公众号
Telephone consultation:
13820629335
Wechat
Contact sales