rust学习基于tokio_actor聊天服务器实战(一 )

前言
tokio是Rust中使用最广泛的异步Runtime,它性能高、功能丰富、便于使用,是使用Rust实现高并发不可不学的一个框架
Actor 背后的基本思想是产生一个独立的任务,该任务独立于程序的其他部分执行某些工作。 通常,这些参与者通过使用消息传递信道与程序的其余部分进行通信。 由于每个 Actor 独立运行,因此使用它们设计的程序自然是并行的。 Actor 的一个常见用法是为 Actor 分配你要共享的某些资源的专有所有权,然后让其他任务通过与 Actor 通信来间接访问彼此的资源。 例如,如果要实现聊天服务器,则可以为每个连接生成一个任务,并在其他任务之间路由一个聊天消息的主任务。 十分有用,因为主任务可以避免必须处理网络IO,而连接任务可以专门处理网络IO;
为什么一定要用actor,这里只是仿照go项目里一部分,go 用的就是actor;

1:环境
rust1.75
ide rustrover64

2:设计及实现
这里使用类似单点登录模式,
useractor
先看go的
在这里插入图片描述
在这里插入图片描述
一共3个协程/future
接受网络消息 一个协程/future
发送网络消息 一个协程/future
逻辑处理 一个协程/future
协程/future间通信 直接用mpsc

world actor/accmgr 管理useractor 登录,踢人,广播等

一共1个协程/future 处理逻辑消息
在这里插入图片描述

rust 版
useractor
说明 receiver: mpsc::UnboundedReceiver, logic future 接受消息并处理
sendclient: mpsc::UnboundedSender 发送消息给 网络future 从而发送给前端
worldsender: mpsc::UnboundedSender, 跟world actor 通信接口

pub enum ActorMessage {
   
   
    synmsgwaitrep {
   
   
        //同步等待回复
        //需要发送到别处等到别处返回结果,类似于同步操作,只是异步执行的  //oneshot  spsc
        respond_to: crate::synMsgWaitRep, //同步消息
    },
    wtc_userchann {
   
   
        respond_to: crate::userChan_WTC, //
    },
    wtc_msg(sendMsgAndType),
    wtc_forwardmsg(sendMsgAndType), //直接转发 data
    ctw_msg(sendMsgAndType),
    ctc_nettologic_msg(sendMsgAndType), //网络消息 to logic
    ctc_logictonet_msg(sendMsgAndType), //logic to net  send
    ctc_signal_event(signalType),
    ctw_signal_event(signalType),
    wtc_signal_event(signalType),
    wtc_getChan_msg(userChannChann),
}
pub struct MyUserActor {
   
   
    connid: ConnectID,
    userid: UserID,
    username: String,
    guildid: GuildID,
    userstate: Arc<AtomicU8>,
    receiver: mpsc::UnboundedReceiver<ActorMessage>,
    sendclient: mpsc::UnboundedSender<VU8>,
    worldsender: mpsc::UnboundedSender<ActorMessage>,
    msgmask: u32,
    lasttime: [u32; ChatChannel_Num],
}

world actor
mpscrecv: mpsc::UnboundedReceiver, 接收ActorMessage logic future
chanchan: mpsc::UnboundedReceiver, 接受 ActorMessage2 logic future

pub enum ActorMessage2 {
   
   
    synmsgwaitrep {
   
   
        //同步等待回复
        //需要发送到别处等到别处返回结果,类似于同步操作,只是异步执行的  //oneshot  spsc
        respond_to: crate::synMsgWaitRep2, //同步消息
    },

    ctw_userhann {
   
   
        respond_to: crate::userChan_CTW, //同步消息
    },
}
pub struct userSendChanActorMessage {
   
   
    pub(crate) chanchan: Option<mpsc::UnboundedSender<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值