fastadmin(tp5)搭建gateway
先把composer调成国内镜像:
composer config -g repo.packagist composer https://packagist.phpcomposer.com
或阿里镜像:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
不更换也行,但是很慢,建议更换
进项目根目录(不是public)
composer require workerman/gateway-worker
装完后,在public里新建一个php文件:chat.php
<?php // [ 应用入口文件 ] // 定义应用目录 define('APP_PATH', __DIR__ . '/../application/'); //此处为绑定的模块 define('BIND_MODULE','push/Start'); // 加载框架引导文件 require __DIR__ . '/../thinkphp/start.php';
然后在 application 里创建一个 文件夹:push
在push下再创建一个controller文件夹
再创建两个文件:Start.php、Events.php
Start.php:
<?php namespace app\push\controller; use Workerman\Worker; use GatewayWorker\Register; use GatewayWorker\BusinessWorker; use GatewayWorker\Gateway; class Start { public function __construct() { //定义端口 $port = 2500; // 初始化register new Register('text://0.0.0.0:' . $port); //初始化 bussinessWorker 进程 $worker = new BusinessWorker(); $worker->name = 'chatWorker'; //进程名 $worker->count = 4; //进程数 $worker->registerAddress = '127.0.0.1:' . $port; // 设置处理业务的类,此处制定Events的命名空间 $worker->eventHandler = '\app\push\controller\Events'; // 初始化 gateway 进程 $gateway = new Gateway("websocket://0.0.0.0:2501"); $gateway->name = 'chatGateway'; //Gateway进程名 $gateway->count = 4; //Gateway进程数 $gateway->lanIp = '127.0.0.1'; $gateway->startPort = 2000; //开始端口 // $gateway->pingInterval = 60; // $gateway->pingNotResponseLimit = 5; // $gateway->pingData = 'pong'; $gateway->registerAddress = '127.0.0.1:' . $port; // 运行所有Worker; Worker::runAll(); } }
Events.php
<?php namespace app\push\controller; use Workerman\Worker; use app\common\controller\Frontend; use GatewayWorker\Lib\Gateway;class Events extends Frontend { /** * 有消息时 * @param integer $client_id 连接的客户端 * @param mixed $message * @return void */ public static function onMessage($client_id, $message) { //$uid = 1; //Gateway::bindUid($client_id, $uid); //与用户id绑定 dump($message); //在sell控制台可查看到打印的内容 //把接收到的消息原样返回 Gateway::sendToClient($client_id, $message); } /** * 当用户连接时触发的方法 * @param integer $client_id 连接的客户端 * @return void */ public static function onConnect($client_id) { echo '连接成功' . PHP_EOL; Gateway::sendToClient($client_id, '连接成功'); } /** * 当用户断开连接时触发的方法 * @param integer $client_id 断开连接的客户端 * @return void */ public static function onClose($client_id) { echo '断开连接' . PHP_EOL; Gateway::sendToClient($client_id, "断开连接"); // Gateway::sendToAll("client[$client_id] logout\n"); } /** * 当进程启动时 * @param integer $businessWorker 进程实例 */ public static function onWorkerStart($businessWorker) { echo '进程启动,进程id:' . $businessWorker->id . PHP_EOL; } /** * 当进程关闭时 * @param integer $businessWorker 进程实例 */ public static function onWorkerStop($businessWorker) { echo '进程关闭,进程id:' . $businessWorker->id . PHP_EOL; } }
做完这些,便可以去sell控制台输入命令运行:
cd 到 public 目录下,然后:
php ./chat.php start
已启动完毕,可以使用在线的websocket测试工具试试,连的时候,是连接端口为:2501 这个。
报错信息都是在这个sell界面查看
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具