-
Notifications
You must be signed in to change notification settings - Fork 3.2k
cygwin-x64版本Http服务无响应 #5759
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
在linux上测试,服务程序运行正常,可以看到当ab工具运行一轮结束产生一些连接中断时,会有以下输出:
而windows上服务程序在ab工具运行一轮后会直接失去响应。 |
WSL1 系统无法支持 SWOOLE_PROCESS 模式。这是系统层面的 BUG,与 Linux 系统不太一致,不支持跨进程 UnixSocket 事件监听。 建议使用 WSL2 或者 Linux |
我直接在windows下用swoole-cli (应该是cygwin吧)运行的,并没有在WSL1/WSL2下运行。这个问题并不是说SWOOLE_PROCESS模式不能用,而是仅在特定情况下出错后无响应(response先write再end,且客户端http请求未完成就直接断开连接),感觉像是,客户端关闭连接后,而内部向这个连接写数据时出了错,而未被正确处理导致的 |
补充一下,我也知道windows版的swoole-cli只用于开发测试不用于生产环境,所以对性能上没有要求,如果能提升下稳定性就更好了 |
@skyshore2001 收到。感谢反馈,使用 write + end 的方式,我们需要在 cygwin 平台上压测一下。我重新打开一下此 issue,后续会继续在这里沟通。 |
满足以下条件,HTTP服务无响应:
1。使用windows版本swoole-cli,版本:Swoole 5.1.7 (cli) (built: Feb 22 2025 03:00:34) (NTS)
(也试过4.8.7, 4.8.13两个版本,都有问题)
2。以SWOOLE_PROCESS模式运行HTTP Server (4.x版本默认就是SWOOLE_PROCESS模式)
3。HTTP输出时先write再end,而不是一次就end
4。并发访问,建议使用apache带的ab工具:
ab -c200 -t2 http://127.0.0.1:8081/
,-c200表示200并发,-t2表示持续2秒一般跑完1-2遍后,手工再调用比如
curl 127.0.0.1:8081
服务就没响应了。服务代码如下:
经多次尝试,猜测问题与并发无关,而是当某个请求中断时,内部处理出问题导致无响应,当切换服务为SWOOLE_BASE模式(先在4.8.x版本上发现的问题,升级到5.1.7发现问题不出现了,以为解决了,结果原来是5.x默认用了SWOOLE_BASE模式,切换到SWOOLE_PROCESS模式也有问题)。
The text was updated successfully, but these errors were encountered: