使用tcp调试工具,三个客户端同时去给服务端发心跳,导致执行一半就执行下一条了

chenStudy

bug描述

使用tcp调试工具,同时开三个客户端同时去给服务端发心跳,设置的是每个客户端1秒一次,应该是发送太快服务端处理不过来,导致上一条还没执行完成就直接执行第二条心跳了,导致第一条心跳执行一半没有服务端还没回应给客户端就执行一下一条

程序代码或配置

期待的结果及实际结果

期望每一次都执行完成

重现bug的步骤

截图

截图

系统环境及workerman/webman等具体版本

Workerman version:3.5.31

PHP version:7.3.4

437 3 0
3个回答

nitron

1.这不是队列,那个进程有空哪个处理(除非你只开一个进程)
2.维持连接的心跳代码不应做业务处理

  • chenStudy 2023-01-06

    嗯嗯,我现在只是用心跳来测试,业务报文里面也会出现这种问题,发送太快的话有时候会执行不完整

keytehu

多个进程并发输出到终端,显示时会出现错乱。
例如 A进程

echo "===\n";
echo 1."\n";
echo 2."\n";

B进程

echo "===\n";
echo 3."\n";
echo 4."\n";

你期待的结果可能是

===
1
2
===
3
4

但实际可能是

===
1
===
3
2
4

因为并发输出了
并不是你说的执行一半,而是显示错乱,给人的错觉只执行一半。

  • 暂无评论
chenStudy

截图
我测试了一下运行一次在数据库插入一条数据,最后两次执行导致没有添加到数据库,并不像你说的那样,但你说的也没问题

  • Gin 2023-01-06

    应该就是 $result>0 那里的问题

  • chenStudy 2023-01-07

    好像是有点问题,是因为里面db太慢,执行不过来跳过了嘛难道

年代过于久远,无法发表回答
🔝