在自定义命令里好像不能使用 redis-queue 来推送消息队列。 我试了一下会报以下错误 PHP Fatal error: Uncaught Error: Call to a member function add() on null in /home/pader/mix/code/webman/vendor/workerman/workerman/Connection/AsyncTcpConnection.p...
Unix Domain Socket 生成的 .sock 文件在 Workerman 停止时总是不自动删除,导致下次启动的时候就因为文件存在而无法启动。 最关键是这个问题好像有时存在,有时又好了。 这是什么原因呢? PHP 版本是 PHP 8.0.13。...
比如一个定时任务在执行中有两步操作,Workerman 在使用 stop 停止时可能会出现前一个操作完成后一个操作未完成就停止的情况,虽然 Workerman 提供了 -g 参数来等待链接全部关闭后停止,但是这两个操作可能没有链接,也可能是长链接不会主动关闭。 有没有一种机制,让用户自己控制这个关闭流程,比如向 Workerman 中注册一个 StopHandler,当 Workerman 使用 stop 时,触发这...
现在只要敲下 php start.php custom 后面不是 Workerman 指定的几个命令,就会出现: php start.php custom Usage: php yourfile <command> [mode] Commands: start Start worker in DEBUG mode. Use mode -d to star...
我在使用过程中发现自己不管怎么试,所有请求都打在一个进程上面。 然后自己写了个简单的示例,使用 sleep() 阻塞住进程,哪怕其中一个进程阻塞了,其它的请求依然打在这个进程上面,其它进程全部旁观。 我知道浏览器会保持连接,于是我打开多个不同的浏览器,还是这样。 我使用 curl 命令试了还是这样。 示例代码: <?php use Workerman\Worker; require __DIR__.'/ve...
按给的文档里的 $loop 使用 Worker::getEventLoop(); 获取,然后使用 Client 实例的 end() 后,没有任何反应,但改为使用 React\EventLoop\Factory::create() 获取到的 $loop 再按 react 的文档里调用 $loop->run() 才正常,on('response') 和 on('error') 才能正确收到数据。 另外为什么不改进...
看了一下源码,无论是向单个 uid,向群组还是向全部,都会向所有的 gateway 进程发送消息,如果是单个或者群组,每个 gateway 自己寻找当前进程中是否有指定用户的连接,然后向这个链接发送消息。 这样的话,假定连接数非常多,gateway 进程也很多,比如有 1000 个 gateway 进程,那每次向指定的一个人发送都会向这 1000 个进程发一次消息,然后只有其中一个进程会向用户发数据,而其它999个进...
在某些稍低一些版本的 Chrome 上与 Workerman 进行 WebSocket 握手失败,比如 Windows 版的 Chrome 41,原因是该版本的浏览器在 WebSocket 握手时默认会传一个 Sec-WebSocket-Protocol 头: Sec-WebSocket-Protocol: undefined 然后就发生了这种错误: WebSocket connection to 'ws://127...
我看了 Workerman 自带的简单的 WebServer,现在输出文件主要是用 $connection->close(file_get_contents($file)); 来实现的。 这里假设有很大的文件(假设几个G)需要给用户去下载,PHP 进程就会报内存超出的错误,这种情况下可能用 nginx 单架一个静态文件的输出更好。 但是打个比方我们并不简单的是下载一个文件,而是要输出某些超大内容,可能来自多个文...