workerman reload
本人使用的是Events事件靜態(tài)回調(diào),在OnWorkerStart集合了Channel服務(wù)connect(),reload重啟workerman,進(jìn)程什么的也依次拉起,channel也經(jīng)過(guò)兩次try connect進(jìn)行拉起,但是就接收數(shù)據(jù)而言,OnMessage 依然接收正常,而channel不管是用訂閱還是隊(duì)列,都不能發(fā)送與消費(fèi),除非客戶端重新建立鏈接。
求問各位有沒有相關(guān)的解決方案,拜謝!
public static function onWorkerStart(BusinessWorker $businessWorker)
{
ChannelClient::connect(config('wk.channel.ip'),config('wk.channel.port'));
self::TimerWorker($businessWorker);
}
public static function onMessage(string $clientId, $messageJson)
{
// 隊(duì)列
ChannelClient::enqueue(self::$queue.$clientId, $messageJson);
// 訂閱
// ChannelClient::publish(self::$queue.$clientId, $messageJson);
}
public static function onWebSocketConnect(string $clientId, $data)
{
$query_string = $data['server']['QUERY_STRING'];
$data = self::checkParamsURI($query_string);
if(empty($query_string) || empty($data['params']['sn']))
{
Gateway::closeClient($clientId);
return false;
}
Gateway::bindUid($clientId, $data['params']['sn']);
$_SESSION[$clientId] = $data['params']['sn'];
$yun = config('stt_cn.STT_CN.wsUri').'?'.$data['query_string'];
$ws_connection = new AsyncTcpConnection($yun);
$ws_connection->WebsocketPingInterval = 10;
$ws_connection->websocketType = Websocket::BINARY_TYPE_ARRAYBUFFER;//BINARY_TYPE_ARRAYBUFFER BINARY_TYPE_BLOB
$ws_connection->onConnect = function($connection){
// $connection->keepConnection = true;
};
$ws_connection->onWebSocketConnect = function(AsyncTcpConnection $con, $responce) use($clientId){
$event_name = self::$queue.$clientId;
ChannelClient::watch($event_name, function($data) use ($clientId, $con) {
$con->send($data);
});
};
$ws_connection->onMessage = function($connection, $data) use($clientId){
self::sendMessage( $data, $clientId);
};
$ws_connection->onError = function($connection, $code, $msg) use($clientId){
self::log(__FUNCTION__, $code, $msg);
};
$ws_connection->onClose = function($connection) use($clientId){
};
$ws_connection->connect();
// self::$ws_server = $ws_connection;
}