当前位置:首页 > CN2资讯 > 正文内容

rustdesk注册服务器 rust创建服务器

2天前CN2资讯


Rust聊天室

  本篇文章是Rust聊天室系列博客的第二篇——重构客户端和服务端的消息传递

  在这篇博客中对Rust聊天室的改进主要从以下三个方面入手

  • 消息struct ,定义每一条消息的数据结构;
  • 构建消息的字符串格式,在客户端和服务端之间采用JSON来传递信息;
  • 解析字符串格式的消息
  • 一、定义消息的数据结构

      首先定义一个文本消息的Struct,代码如下:

    //define the text message struct #[derive(Debug,Clone)] pub struct TextMessage{ pub from : String, //the address of sender pub to : String,//the address of receiver pub content : String,//the content of msg pub m_date : String //the date of the message(millis) }

      TextMessage主要包含有消息来源,消息接收,消息内容和消息发送时间这几个属性,前三个属性暂时定义为String,而m_date保存的是消息的发送时间。

    二、构建消息的字符串格式

      在聊天室项目的前期,我选择采用字符串流的形式来在服务端和客户端之间转换消息(后面可能直接使用JSON,但JSON实际也是字符串啦~),所以在构建消息之后需要将TextMessage对象转换为String,因此需要在TextMessage实现std::string::ToString这个Trait,实现代码如下:

    use std::string::ToString; //the mothod to convert TextMessage to String impl ToString for TextMessage{ fn to_string(&self) -> String{ format!("({},{},{},{})",self.from,self.to,self.content,self.m_date) } }

    三、从字符串中获取消息

      同样地,当接收到转发的字符串流后,我们不需要将整个字符串打印出来,而是会将字符串转换成TextMessage,然后打印我们需要的信息(即发送人、发送内容、发送时间等)这就要求我们的TextMessage实现std::str::FromStr这个Trait了。

    use std::str::FromStr; use std::num::ParseIntError;、 //the mothod to convert String to TextMessage impl FromStr for TextMessage{ type Err = ParseIntError; fn from_str(s : &str) -> Result<Self,Self::Err>{ let message_info : Vec<&str> = s.trim_matches(|p| p == '(' || p == ')' ).split(",").collect(); let from = message_info[0].to_string(); let to = message_info[1].to_string(); let content = message_info[2].to_string(); // let m_date = message_info[3].parse::<i64>()?; let m_date = message_info[3].to_string(); Ok(TextMessage{from,to,content,m_date}) } }

    四、消息发送时间属性

      在这次改进中,我们引入了一个文本消息TextMessage的Struct来规范我们客户端发送的每一条信息,每一条信息都有一个发送时间,在这一次改进中,简单地使用了第三方库chrono来获取时间,而且获取的还是utc时间,简单的代码如下:

    //create a simple message let text_message = utils::TextMessage{ from : String::from("send_address"), to : String::from("receive_address"), content : message.clone(), m_date : Utc::now().to_string() };

    五、下一次改进之处

  • 客户端登录的用户名 ,在前面的demo中,没有设置client启动时登录用户名密码,所以在下一篇博客中,将改进方便消息转发;
  • 对TextMessage更好地封装 ,从上面代码可以看出,在创建TextMessage对象时,我们时将TextMessage的各个属性设置为pub,方便我们直接访问,所以在下一次博客中,我们将对此进行更进一步地封装,避免直接访问属性。
  • 拭目以待
  • 六、总结

     


      你可能想看:

      扫描二维码推送至手机访问。

      版权声明:本文由皇冠云发布,如需转载请注明出处。

      本文链接:https://www.idchg.com/info/20602.html

      分享给朋友:

      “rustdesk注册服务器 rust创建服务器” 的相关文章

      Wikihost:构建高效知识库的理想WordPress主题

      Wikihost是一个专为WordPress平台设计的知识库主题,目的在于帮助用户轻松创建和管理知识库文章与文档页面。这款主题适合各种类型的网站,从小型企业到大型社区,用户都能通过它建立富有信息性的页面。Wikihost给用户提供了一整套便捷的功能,帮助他们分享知识和信息。 我发现Wikihost的...

      如何选择RN套餐性价比高的VPS服务

      RN套餐概述 在谈论RackNerd之前,我想先简单介绍一下这家公司。RackNerd成立于2019年,它是一家专注于虚拟主机和VPS服务的商家。作为市场中的新兴参与者,RackNerd凭借其高性价比迅速赢得了不少用户的青睐。在我了解的多家VPS提供商中,RackNerd以其实惠的价格和稳定的性能脱...

      APT攻击解析:如何应对高级持续性威胁

      APT攻击,或称为高级持续性威胁,是一种复杂的网络攻击形式。这种攻击的发起者通常是具有高度组织性和专业性的攻击者,可能是国家支持的黑客组织,或者其他有目的的恶意实体。他们的目标不仅仅是短期内造成损害,而是着眼于更长远的战略性目标,比如窃取国家机密、企业的核心技术或其他商业秘密。这种攻击对目标组织的声...

      Virmach Coupon 让您轻松获取高性价比的VPS服务

      在今天的网络世界中,寻找高性价比的虚拟专用服务器(VPS)和云托管服务是一项挑战。Virmach正是在这样的背景下脱颖而出。总部位于加利福尼亚州洛杉矶的Virmach,以其多样的服务和全球级的数据中心而闻名,满足了不同用户的需求。无论是新手小白还是经验丰富的开发者,Virmach都能提供适合他们的解...

      深入了解LOC VPS:选择、评测与未来发展趋势

      LOC VPS,顾名思义,是一种基于位置的虚拟专用服务器。简单来说,LOC VPS是一种通过虚拟化技术在数据中心创建和管理的服务器环境。它为用户提供了一种灵活、可扩展的计算资源,可以满足不同需求的业务。相较于物理服务器,LOC VPS在资源利用率、成本和管理上都更加高效。 LOC VPS有几个显著的...

      AS4134:全球互联网中的自主系统与数据传输的未来

      什么是AS4134? AS4134是一个全球互联网中的自治系统编号,这个编号用于标识网络中的各种自治系统。让我简单说一下,自治系统可以被理解为单一的网络或网络集合,在运行自己的路由协议时相对独立。AS4134作为其中的一部分,协助数据在互联网中高效而安全地传输。当你在网上冲浪时,实际上是在通过多个这...