< 返回版块

Borber 发表于 2023-01-31 02:13

Tags:axum

很奇怪, 本地 windows 和 github codespce 均可以正常运行, 但编译后放到 vps 上 curl 127.0.0.1:3002 则无返回.

特别之处, vps 是 almalinux9 系统 openssl 动态链接好像有点问题所以用的下面静态. 运行起来不报错了, 但也没有返回了,

[dependencies]
reqwest = { version = "0.11", features = ["json"] }
axum = "0.6"
tokio = { version = "1", features = ["full"] }
once_cell = "1"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"


[target.'cfg(unix)'.dependencies]
openssl = { version = '0.10', features = ["vendored"] }

也尝试在vps上直接编译, 不用上面的target 也可以动态链接了,不过还是直接超时无返回...

gun musl 都尝试过, 能正常运行的均出现超时无返回情况.

请大佬们帮忙看看, 分析一下原因


Ext Link: https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=9d437a0befd5186840a325743414f8b3

评论区

写评论
github.com/shanliu/lsys 2023-02-03 20:45

有本rust async的书 没多少字 建议看看

--
👇
Borber: 确实不是很明白, 但不影响, 边写边学比较有干劲一点

--
👇
shanliu: 强烈建议把await搞明白在写 把await搞明白了应该不致于用上 thread::sleep(Duration::from_secs(100000));

作者 Borber 2023-02-02 00:52

确实不是很明白, 但不影响, 边写边学比较有干劲一点

--
👇
shanliu: 强烈建议把await搞明白在写 把await搞明白了应该不致于用上 thread::sleep(Duration::from_secs(100000));

github.com/shanliu/lsys 2023-02-01 22:30

强烈建议把await搞明白在写 把await搞明白了应该不致于用上 thread::sleep(Duration::from_secs(100000));

作者 Borber 2023-01-31 08:45

太感谢了, 确实是因为这个问题, 修改之后就能正常运行了, 第一次踩这个坑, 考虑了这么多, 忘了自己是1c1g的小鸡. 哈哈哈

--
👇
hax10: 应该是你云服虚拟机只有一个处理器核而导致的,这跟你的外部函数库无关。

单核情况下,tokio执行器只会启动一条工作线程。这条线程在第40行的阻塞性休眠命令

thread::sleep(Duration::from_secs(100000));

就会进入20多个小时的无反应状态,并且阻挡服务器的正常运转。

你需要调用tokio提供的非阻塞性休眠命令

tokio::time::sleep(Duration::from_secs(100000)).await;

在本地你拥有多个处理器核,于是tokio将启动多条工作线程,所以上面的代码只能阻塞其中一条,别的还能处理客户端发的请求。

你如果不换成非阻塞性函数,反而在主函数main前面换个 #[tokio::main(worker_threads = 1)]强制tokio只使用单条工作线程在本地试试,估计也会出现服务器无反应的现象。

hax10 2023-01-31 08:20

应该是你云服虚拟机只有一个处理器核而导致的,这跟你的外部函数库无关。

单核情况下,tokio执行器只会启动一条工作线程。这条线程在第40行的阻塞性休眠命令

thread::sleep(Duration::from_secs(100000));

就会进入20多个小时的无反应状态,并且阻挡服务器的正常运转。

你需要调用tokio提供的非阻塞性休眠命令

tokio::time::sleep(Duration::from_secs(100000)).await;

在本地你拥有多个处理器核,于是tokio将启动多条工作线程,所以上面的代码只能阻塞其中一条,别的还能处理客户端发的请求。

你如果不换成非阻塞性函数,反而在主函数main前面换个 #[tokio::main(worker_threads = 1)]强制tokio只使用单条工作线程在本地试试,估计也会出现服务器无反应的现象。

1 共 5 条评论, 1 页