很奇怪, 本地 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
1
共 5 条评论, 1 页
评论区
写评论有本rust async的书 没多少字 建议看看
--
👇
Borber: 确实不是很明白, 但不影响, 边写边学比较有干劲一点
--
👇
shanliu: 强烈建议把await搞明白在写 把await搞明白了应该不致于用上 thread::sleep(Duration::from_secs(100000));
确实不是很明白, 但不影响, 边写边学比较有干劲一点
--
👇
shanliu: 强烈建议把await搞明白在写 把await搞明白了应该不致于用上 thread::sleep(Duration::from_secs(100000));
强烈建议把await搞明白在写 把await搞明白了应该不致于用上 thread::sleep(Duration::from_secs(100000));
太感谢了, 确实是因为这个问题, 修改之后就能正常运行了, 第一次踩这个坑, 考虑了这么多, 忘了自己是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只使用单条工作线程在本地试试,估计也会出现服务器无反应的现象。应该是你云服虚拟机只有一个处理器核而导致的,这跟你的外部函数库无关。
单核情况下,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只使用单条工作线程在本地试试,估计也会出现服务器无反应的现象。