Rust 元宇宙 13 —— 客户端连接
上一章中,我们为了连接进入元宇宙的客户端准备了一个服务器的 IDMap,以及基于 MessagePack 的持续化方法,用来存放元宇宙里面的玩家数据,现在我们开始一点点构建这个连接到元宇宙的客户端,以及服务端对应的支持。
我们使用基于消息的服务来处理服务器端的不同功能,比如说前面所有关于 临近角色 列表的部分,我们放在 world 服务中,使用 一个 本地的服务间 RPC 来跨跨线程调用,简单的 rpc 代码如下:
run 是远程执行一个请求,不需要回答,call 是远程执行一个请求 类型为 T,并等待返回值 类型为 R 的结果。
handle 是处理请求的基本函数,我们采用同步的方式处理,先看看队列里面有没有请求,如果有则全部处理,然后超时指定时间等待请求,这样在处理消息的同时,有机会定时处理一些事物。
除了 world 作为世界服务以外,我们使用 agent 作为玩家的代理服务,
agent 处理消息的代码如下:
注意,我们要为每个玩家保留一个发送信息的端口 agent_tx,这样 客户端的 Websocket 连接建立之后,我们就可以使用这个端口将 登录消息,世界同步消息、以及其他一切玩家相关的消息发送到客户端。
Websocket 对应的连接处理代码如下:
websocket 连接建立后,创建 一个 rx,tx 对,传递给 agent 服务。
当接受到 来自 rx 的消息(可能来自于 agent 服务,也可能来自以后的脚本、NFT 和元宇宙的其他服务)之后,我们使用 MessagePack 编码,并发送到连接上来的客户端。
客户端使用下面的代码解码:
当我们执行客户端,将会看到下面的结果:
这是我们预期的结果,因为我们还没有创建 元宇宙的角色。
版权声明: 本文为 InfoQ 作者【Miracle】的原创文章。
原文链接:【http://xie.infoq.cn/article/8d998469b66fd7e76e13f7973】。未经作者许可,禁止转载。
评论