You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP Workerman无需触发onMessage回调向用户发送消息的问题咨询

Workerman开发问题解答

1. onConnect回调加$data参数报错的原因

Workerman的内置回调参数是固定定义的:

  • onConnect 回调仅会传入唯一参数$connection,代表当前连接对象。该回调触发时机是TCP三次握手完成、连接刚建立的瞬间,此时服务端还未收到客户端发送的任何数据,自然不存在$data变量,你强行给回调定义第二个参数会触发参数不匹配的错误。

2. 不触发onMessage发消息的可行性

分两种情况:

  • 如果你要发送的$data是客户端主动上传的请求数据:必须等待客户端发送数据触发onMessage回调才能拿到解码后的$data,无法绕开onMessage获取该数据。
  • 如果你要发送的是服务端自行构造的自定义数据:完全不需要依赖onMessage回调,可以在onConnect触发时直接调用$connection->send()发送你构造好的内容,示例如下:
// 修正后的onConnect示例,连接建立直接发送自定义内容
$tcp_worker->onConnect = function($connection)
{
    echo "New connection from ip " . $connection->getRemoteIp() . " " . date("Y-m-d H:i:s") ."\n";  
    // 直接发送你需要的自定义内容,不需要等客户端发消息触发onMessage
    $custom_data = "你要发送的自定义内容";
    $connection->send(" \$KE,WR,1,1 {$custom_data} \n");
};

3. 现有代码的已知问题

你连续两次给$tcp_worker->onMessage赋值,后一次赋值会直接覆盖前一次的逻辑,你写的第一个onMessage里发送$KE,WR,1,1的逻辑完全不会执行,需要保留哪段自行删除重复赋值的部分即可。


内容的提问来源于stack exchange,提问作者leomaty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 11:45:04