< 返回版块

imoegirl 发表于 2021-07-25 22:22

求使用Rust写游戏服务器的教程。对于使用Rust写服务器,有点迷茫,假设使用C#来写,例如一个服务器可能会有一个处理客户端连接的模块,假设叫做 ConnectionManager,还有处理数据包的逻辑,假设叫做 PackageHandler。对于C#来说,这两个模块可以互相调用,例如 ConnectionManager 收到数据包后,会调用 PackageHandler 进行处理,而 PackageHandler 处理完后,可能也会直接调用 ConnectionManager 向客户端发数据,互相调用就很容易,例如将两个模块都做成单例,或者静态变量等。但是在Rust中,这种会互相调用的形式就不知道怎么写,还是说,有其他的模式?

评论区

写评论
作者 imoegirl 2021-07-26 16:00

感谢指点,我研究一下

--
👇
oloshe: 可以看看actix-web + actix-web-actors,通过actor模型来实现不同模块的通信。

作者 imoegirl 2021-07-26 16:00

感谢指点,我研究一下

--
👇
Pikachu: 猜测一下,你要实现的时序是不是这样

platuml online

如果是这样的话,你可以考虑用tokio或者actix。

作者 imoegirl 2021-07-26 15:59

你好,想加个联系方式请教一下,你没留下联系方式,你加我吧,微信: ifloop QQ: 807591628

--
👇
reison1218: 我用rust写游戏服务器,假设A代表网络模块(管理与客户的tcp连接),B为handler模块(处理具体客户的的请求),有两个方案可以解决,第一个:你的结构应该像树状一样,比如,有一个struct,叫做GameMgr,然后它有两个变量clients和handlers,clients的类型就是A,handlers的类型就是B,再说具体点,B的类型可以是一个hashMAP,key就是cmd(游戏指令),value是函数指针,这样就可以识别A里面的客户的发过来的cmd命令来执行B里面的具体业务。还有别的方案,一两句话说不太清楚,如果你有兴趣,可以加个联系方式。

reison1218 2021-07-26 10:41

我用rust写游戏服务器,假设A代表网络模块(管理与客户的tcp连接),B为handler模块(处理具体客户的的请求),有两个方案可以解决,第一个:你的结构应该像树状一样,比如,有一个struct,叫做GameMgr,然后它有两个变量clients和handlers,clients的类型就是A,handlers的类型就是B,再说具体点,B的类型可以是一个hashMAP,key就是cmd(游戏指令),value是函数指针,这样就可以识别A里面的客户的发过来的cmd命令来执行B里面的具体业务。还有别的方案,一两句话说不太清楚,如果你有兴趣,可以加个联系方式。

Pikachu 2021-07-26 00:32

猜测一下,你要实现的时序是不是这样

platuml online

如果是这样的话,你可以考虑用tokio或者actix。

oloshe 2021-07-26 00:31

可以看看actix-web + actix-web-actors,通过actor模型来实现不同模块的通信。

1 共 6 条评论, 1 页