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