/**
* 项目 socket 连接时触发(一次)
* 当客户端与 Workerman 建立连接时(TCP 三次握手完成后)触发的回调函数
*/
public static function onConnect($client_id)
{
// 定义连接函数
$connectWs = function () {
$ws = new AsyncTcpConnection('ws://dashscope.aliyuncs.com/api-ws/v1/inference');
$ws->headers = [
"Authorization" => "Bearer " . getenv("DASHSCOPE_API_KEY"),
];
$ws->transport = "ssl";
// 连接成功回调
$ws->onConnect = function ($ws) {
self::$aliWs = $ws;
echo "connected success:" . $ws->id . "\n";
};
// 当收到消息时
$ws->onMessage = function ($ws, $data) {
var_dump("ali 返回消息", $data);
$msg = json_decode($data, true);
$channel = self::$sendWsChan;
Coroutine::create(
function () use ($channel, $msg) {
$channel->push($msg);
},
);
};
// 连接关闭时进行重连
$ws->onClose = function ($ws) {
echo "连接关闭,尝试重新连接...\n";
self::$aliWs = null;
$ws->reConnect(1);
};
$ws->onError = function ($ws) {
echo "错误输出" . $ws->error;
};
$ws->connect();
};
//定时器触发
if (self::$aliWs) {
var_dump("发送事件");
self::$aliWs->send(json_encode($data));
}
初次建立长连接可以发送成功,但是如果阿里云长连接断线重连几次后,发送事件,在 onMessage 里边没有响应。不明白为什么出现这种情况。var_dump("发送事件"); 可以打印数据。但是 onMessage 不存在数据。