tp上的代碼:
public function index()
{
$task_connection = new AsyncTcpConnection('websocket://127.0.0.1:9502');
// 發(fā)送數據
$task_connection->onConnect = function($task_connection)
{
echo "connect success\n";
$task_connection->send(json_encode(['11111']));
};
// // 異步獲得結果
// $task_connection->onMessage = function($task_connection, $task_result)
// {
// // 結果
// var_dump($task_result);
// // 獲得結果后記得關閉異步連接
// $task_connection->close();
// };
// 執(zhí)行異步連接
$task_connection->connect();
}
GatewayWorker上開啟服務的代碼:
class Task
{
//設置Worker子進程啟動時的回調函數,每個子進程啟動時都會執(zhí)行。
public function onWorkerStart($worker)
{
}
//當客戶端與Workerman建立連接時(TCP三次握手完成后)觸發(fā)的回調函數。
public function onConnect($connection)
{
var_dump(1111);
}
//當客戶端通過連接發(fā)來數據時(Workerman收到數據時)觸發(fā)的回調函數
public function onMessage($connection, $data)
{
//處理異步任務
// $task_data = json_decode($data, true);
var_dump('task321');
// $connection->send('321789');
}
//當客戶端連接與Workerman斷開時觸發(fā)的回調函數。
public function onClose($connection)
{
}
//當客戶端的連接上發(fā)生錯誤時觸發(fā)。
public function onError($connection)
{
}
}
// 自動加載類
require_once __DIR__ . '/../../vendor/autoload.php';
require_once __DIR__.'/Task.php';
use \Workerman\Worker;
use \Workerman\WebServer;
// task worker,使用Text協議
$task_worker = new Worker('websocket://0.0.0.0:9502');
// task進程數可以根據需要多開一些
$task_worker->count = 50;
$task_worker->name = 'Task';
// 創(chuàng)建一個對象
$task = new \app\Task();
// 調用類的方法
$task_worker->onWorkerStart= array($task, 'onWorkerStart');
$task_worker->onConnect = array($task, 'onConnect');
$task_worker->onMessage = array($task, 'onMessage');
$task_worker->onClose = array($task, 'onClose');
$task_worker->onError = array($task, 'onError');
// 如果不是在根目錄啟動,則運行runAll方法
if(!defined('GLOBAL_START'))
{
Worker::runAll();
}
進程是可以正常開啟的,但是在tp上就是連接不到
AsyncTcpConnection 只能在workerman的運行環(huán)境運行。你的tp應該是在php-fpm下運行的。
你可以在tp下使用這個庫試下 https://github.com/Textalk/websocket-php