最近项目组开发直播在线类 unity 游戏,类似于 MMO 游戏,有房间、 多人在线概念,房间内人员加入、走动、退出,都要通知到的房间内其他人,所以需要一个高性能用户状态(主要是坐标位置信息)消息广播转发服务,当前的服务 基于 nodejs ,使用 koa 路由,grpc 转发,
由于本人一直从事 java 后端开发,所以想用 java 开发一个消息转发服务。
网上找资料零零散散找了很久,目前已经出来一个基础的 demo ,
基本架构:
提供的 url: interface/{userId}/{teamId}
负载:使用 nginx url hash
通过 hash teamId 将相同房间的负载到同一台机器,规避了服务器间相互调用。
服务:
使用了 quarkus 自带的 ServerEndpoint 注解的 websocket ,自带的 websocket 好像目前版本也用到了 vertx 这些,自己创建 map 管理 组内成员状态,这样组内广播也是单服务广播,暂时基本满足需求,无须全服广播,后期不确定有没有这个需求。 后期准备加入 verx cluster 这些特性,支持分布式。
目前进展:
正在找工具压测,
压测目标: 至少 100 个连接同时在一个房间内,一个新成员加入房间,随机生成坐标信息,通知到房内所有人(最大 99 人),同时房间内所有人当前坐标信息通知给这个新成员( 99+1 条消息)。当成员移动时,将坐标信息 发给房间内所有其他人( 99 条消息)。
网上找了一个工具
https://github.com/MirrenTools/Orion-Stress-Tester ,魔改了一下,支持我当前服务接口的 动态传参,但是初步测试了下,感觉性能也不是很强,是不是 quarkus 自带的 websocket 不是很强,看了下基于 undertow ,压测一会就有连接报错,感觉性能也不是很强?有大佬知道啥原因不,或者有兴趣的,一起交流下,
或者有其他 websocket 高性能广播转发开源组件 也可以推荐,谢谢大佬们了。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/878539
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.