tp上的代码:
public function index()
{
$task_connection = new AsyncTcpConnection('websocket://127.0.0.1:9502');
// 发送数据
$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();
// };
// 执行异步连接
$task_connection->connect();
}
GatewayWorker上开启服务的代码:
class Task
{
//设置Worker子进程启动时的回调函数,每个子进程启动时都会执行。
public function onWorkerStart($worker)
{
}
//当客户端与Workerman建立连接时(TCP三次握手完成后)触发的回调函数。
public function onConnect($connection)
{
var_dump(1111);
}
//当客户端通过连接发来数据时(Workerman收到数据时)触发的回调函数
public function onMessage($connection, $data)
{
//处理异步任务
// $task_data = json_decode($data, true);
var_dump('task321');
// $connection->send('321789');
}
//当客户端连接与Workerman断开时触发的回调函数。
public function onClose($connection)
{
}
//当客户端的连接上发生错误时触发。
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';
// 创建一个对象
$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的运行环境运行。你的tp应该是在php-fpm下运行的。
你可以在tp下使用这个库试下 https://github.com/Textalk/websocket-php