< 返回版块

sdj0016 发表于 2021-04-20 14:35

刚开始学Rust,作为一个老码农,之前一直用C++写游戏服务器。最近想转Rust,不希望重新造轮子。请各位高手指教:在哪里可以获得比较稳定的rust实现的socket服务器代码?同时,也想请教一下:如果我想用Rust做其他功能,在哪里可以获得比较靠谱的示例代码?谢谢!

评论区

写评论
作者 sdj0016 2021-04-21 16:23

非常感谢您的热心回复,好人赞一个。

--
👇
ruby: 你可以自行去 Google 搜 tokio websocket 关键词就一堆资料够你看的

随便谷歌下都能搜到tokio-tungstenite这种tokio生态的websocket协议解析库,下次提问之前建议您自己先去网上搜,都是公开开源的很容易找到的资料,不至于问websocket, protobuf 用那个库这种问题

rust protobuf用哪个库这种问题我就不回答了,自己善用搜索引擎很容易就能找到答案。使用经验来看给brew install protobuf的protoc装上rust的插件就可以把protobuf编译成Rust代码了

下面这个是actix-web的ws实现,用起来会比tokio难点(要理解Actor模型,有学习成本,有时间可以学习下,没时间就只看tokio),建议就只看tokio怎么做websocket服务器就好了,也就TcpStream, accept_connection, tokio::select!等等概念

https://github.com/actix/actix-web/blob/master/actix-http/src/ws/codec.rs

我曾经用的是ruby_on_rails后端,前端是android的gson,换protobuf之后再也没遇过反序列化失败、字段缺失、参数类型错误等等问题,配合上Rust优秀的错误处理和模式匹配,我们的tokio的websocket服务器基本就没遇过什么报错,安全性高很可靠很稳定(再也不用线上改rails代码那么胆战心惊)

不要把时间花在websocket,protobuf用哪个库这种表层问题,实际上你基础好的话,自己用Rust标准库写一个Rust的Websocket服务器也不难,或者更进一步写个 no_std 版本的。用Rust做web后端项目的难点在于 配置文件读取/传递/共享、怎么做个websocket聊天室让两个connection可以私聊、tokio的异步原理、怎样让项目代码能享受更多静态分析、共享不可变和可变状态之间的区别、如何避免滥用tokio调度/自旋锁导致CPU负载过高、多层嵌套Arc是不是好的实践 等等项目代码问题。你先自己试着写一个 tokio + websocket + protobuf 的聊天室后端API练手下,不过可能没人帮你 code review 很多你写的Rust代码的问题你自己都不知道。

protobuf还有点缺陷就是,Rust的类型远比protobuf丰富,很多Rust类型都没法容易的映射到protobuf,例如protobuf就没Result类型,想要实现类型效果麻烦多了。这带来另一个问题是,例如protobuf的Option 在不支持option的语言中这个Option会被unwrap_or_default(),导致丢失了Option信息。我们前后端用的 swift-rust 两种语言都支持 Option倒不担心这个问题,但是前端如果是Java这个Option传过去就会没掉了

--
👇
sdj0016: websocket你们用的什么库?protobuf呢? 我们现在用C++写的服务器也是用的websocket和protobuf。

--
👇
ruby: 推荐 tokio(有 amazon, 字节跳动等大厂的工程师参与维护), 可以看他们的 echo 的 example:

代码链接: https://github.com/tokio-rs/tokio/blob/master/examples/echo.rs

我司有款 app 产品的后端 API 就是 tokio + websocket + protobuf 实现的

另外 hyper 好像也是个 socket 服务器的选择,不过不像 tokio 那样有若干大厂维护

ruby 2021-04-21 14:27

你可以自行去 Google 搜 tokio websocket 关键词就一堆资料够你看的

随便谷歌下都能搜到tokio-tungstenite这种tokio生态的websocket协议解析库,下次提问之前建议您自己先去网上搜,都是公开开源的很容易找到的资料,不至于问websocket, protobuf 用那个库这种问题

rust protobuf用哪个库这种问题我就不回答了,自己善用搜索引擎很容易就能找到答案。使用经验来看给brew install protobuf的protoc装上rust的插件就可以把protobuf编译成Rust代码了

下面这个是actix-web的ws实现,用起来会比tokio难点(要理解Actor模型,有学习成本,有时间可以学习下,没时间就只看tokio),建议就只看tokio怎么做websocket服务器就好了,也就TcpStream, accept_connection, tokio::select!等等概念

https://github.com/actix/actix-web/blob/master/actix-http/src/ws/codec.rs

我曾经用的是ruby_on_rails后端,前端是android的gson,换protobuf之后再也没遇过反序列化失败、字段缺失、参数类型错误等等问题,配合上Rust优秀的错误处理和模式匹配,我们的tokio的websocket服务器基本就没遇过什么报错,安全性高很可靠很稳定(再也不用线上改rails代码那么胆战心惊)

不要把时间花在websocket,protobuf用哪个库这种表层问题,实际上你基础好的话,自己用Rust标准库写一个Rust的Websocket服务器也不难,或者更进一步写个 no_std 版本的。用Rust做web后端项目的难点在于 配置文件读取/传递/共享、怎么做个websocket聊天室让两个connection可以私聊、tokio的异步原理、怎样让项目代码能享受更多静态分析、共享不可变和可变状态之间的区别、如何避免滥用tokio调度/自旋锁导致CPU负载过高、多层嵌套Arc是不是好的实践 等等项目代码问题。你先自己试着写一个 tokio + websocket + protobuf 的聊天室后端API练手下,不过可能没人帮你 code review 很多你写的Rust代码的问题你自己都不知道。

protobuf还有点缺陷就是,Rust的类型远比protobuf丰富,很多Rust类型都没法容易的映射到protobuf,例如protobuf就没Result类型,想要实现类型效果麻烦多了。这带来另一个问题是,例如protobuf的Option 在不支持option的语言中这个Option会被unwrap_or_default(),导致丢失了Option信息。我们前后端用的 swift-rust 两种语言都支持 Option倒不担心这个问题,但是前端如果是Java这个Option传过去就会没掉了

--
👇
sdj0016: websocket你们用的什么库?protobuf呢? 我们现在用C++写的服务器也是用的websocket和protobuf。

--
👇
ruby: 推荐 tokio(有 amazon, 字节跳动等大厂的工程师参与维护), 可以看他们的 echo 的 example:

代码链接: https://github.com/tokio-rs/tokio/blob/master/examples/echo.rs

我司有款 app 产品的后端 API 就是 tokio + websocket + protobuf 实现的

另外 hyper 好像也是个 socket 服务器的选择,不过不像 tokio 那样有若干大厂维护

rustdesk 2021-04-20 16:35

分享一个我的TCP封装, https://github.com/rustdesk/rustdesk/blob/master/libs/hbb_common/src/tcp.rs

作者 sdj0016 2021-04-20 16:24

websocket你们用的什么库?protobuf呢? 我们现在用C++写的服务器也是用的websocket和protobuf。

--
👇
ruby: 推荐 tokio(有 amazon, 字节跳动等大厂的工程师参与维护), 可以看他们的 echo 的 example:

代码链接: https://github.com/tokio-rs/tokio/blob/master/examples/echo.rs

我司有款 app 产品的后端 API 就是 tokio + websocket + protobuf 实现的

另外 hyper 好像也是个 socket 服务器的选择,不过不像 tokio 那样有若干大厂维护

作者 sdj0016 2021-04-20 16:20

非常感谢指路。

--
👇
ruby: 推荐 tokio(有 amazon, 字节跳动等大厂的工程师参与维护), 可以看他们的 echo 的 example:

代码链接: https://github.com/tokio-rs/tokio/blob/master/examples/echo.rs

我司有款 app 产品的后端 API 就是 tokio + websocket + protobuf 实现的

另外 hyper 好像也是个 socket 服务器的选择,不过不像 tokio 那样有若干大厂维护

ruby 2021-04-20 16:16

推荐 tokio(有 amazon, 字节跳动等大厂的工程师参与维护), 可以看他们的 echo 的 example:

代码链接: https://github.com/tokio-rs/tokio/blob/master/examples/echo.rs

我司有款 app 产品的后端 API 就是 tokio + websocket + protobuf 实现的

另外 hyper 好像也是个 socket 服务器的选择,不过不像 tokio 那样有若干大厂维护

Mike Tang 2021-04-20 16:15

是一个web开发框架。

作者 sdj0016 2021-04-20 15:30

找了一个 actix-connect v2.0. ,下载量很大,不知道actix是什么意思。。

--
👇
Mike Tang: lib.rs 整理了一下,看star数。

Mike Tang 2021-04-20 15:03

lib.rs 整理了一下,看star数。

作者 sdj0016 2021-04-20 14:58

库太多,不知道哪个是符合要求的。

--
👇
eric642: https://crates.io/ 啥都有

eric642 2021-04-20 14:40

https://crates.io/ 啥都有

1 共 11 条评论, 1 页