当前位置: 首页 > 后端技术 > PHP

thinkphp5.0集成phpsocketio完整攻略,绕路

时间:2023-03-29 17:42:06 PHP

使用环境:thinkphp5.0项目需要前端下单,后台接受,即时提示。例如:美团外卖,客户下单成功后,商家会立即有语音提示接单。开发环境thinkphp5.0phpsocketio(因为需要启动socket服务,所以需要在能够满足shell的环境下使用)socketio的优势这只是我的观点。毕竟我没有深入研究过socketio,所以只是简单总结一下:减少服务器IO负载长连接比ajax轮询更可靠。服务稳定,支持动态。简单看了下,内存占用很小,只有一个进程。据官方介绍,一个进程也可以容纳万人高并发。因此,对于我的项目来说,绰绰有余官方文档https://github.com/walkor/php...开始开发安装phpsocketio首先cd到thinkphp的项目根目录。使用如下命令composerrequireworkerman/phpsocket.io(composer这里不做说明,有什么问题请看一下,应该可以解决)安装完成后,vendor文件夹下应该有一个workerman文件夹.如果存在,恭喜,服务入口文件已经安装。回到项目根目录,新建socketio.php,开始编辑#!/usr/bin/envphp**完整的版权和许可信息,请查看LICENSE*文件与此源代码一起分发。*/namespaceapp\socketio\controller;require_onceVENDOR_PATH。"workerman/phpsocket.io/src/autoload.php";usePHPSocketIO\SocketIO;useWorkerman\Worker;classServer{publicfunctionindex(){$io=newSocketIO(8080);//套接字端口$io->on('workerStart',function()use($io){$inner_http_worker=newWorker('http://0.0.0.0:5880');//这里不用改IP,内网通信是used,端口不能和socket端口连接$inner_http_worker->onMessage=function($http_connection,$data)use($io){$io->emit('new_msg','44444');//固定数据写到这里,请根据自己的项目需要进行调整,如果这里看不懂,可以看官方文档,说的很清楚$http_connection->send('ok');};$inner_http_worker->听();});//当有客户端连接时$io->on('connection',function($socket)use($io){//定义聊天消息事件回调函数$socket->on('chatmessage',function($msg)use($io){//从服务器事件触发所有客户端定义的聊天消息$io->emit('chatmessagefromserver',$msg);});});工人::runAll();}}创建API触发socketio同理,可以在socketio下新建一个API控制器,这里只是为了测试publicfunctionapi(){//推送url地址,使用自己的服务器地址$push_api_url="http://0.0.0.0:5880";//这里也不需要改IP只是端口必须和server.php的端口一致onworker$post_data=array("type"=>"publish","content"=>"Thisisthetestdatapushed",);$ch=curl_init();curl_setopt($ch,CURLOPT_URL,$push_api_url);curl_setopt($ch,CURLOPT_POST,1);curl_setopt($ch,CURLOPT_HEADER,0);curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);curl_setopt($ch,CURLOPT_POSTFIELDS,$post_data);curl_setopt($ch,CURLOPT_HTTPHEADER,array("Expect:"));$return=curl_exec($ch);curl_close($ch);var_export($返回);}现在有一个server服务器,API触发端,connect后,需要显示出来,也就是我们前端前端现在需要写的是商户收到的提示。之前写的server服务器提供了phpsocketio监控和socket服务,API提供了事件触发器,即有人下单后触发。命令作为事件触发服务器socket,让他在启动前响应前端代码。请注意:这里的端口与域名相比较上面有两个我之前出现问题的端口和域名:域名就是外网的域名,当然需要和你的socket服务在同一个IP下,也就是你的socket部署在114.114.11的IP下4.114.这个域名必须在114.114.114.114的IP下。端口为后端服务新建SocketIO的端口。socket.on()文档都是socket.on('content',function(msg){....}),但是你可以在我们的Server中看到$io->emit('new_msg','')。php;这里的自定义事件明明叫new_msg,但是写成content。可能是我眼瞎没看清楚,不过也提醒一下,这里的回调事件名确实需要注意一下。现在,进入服务器管理并打开shell。cd到项目根目录。然后执行phpsocketio.phpstartphpsocketio.phpstartstartphpsocketio.phpstopstopphpsocketio.phprestartrestartrestartphpsocketio.phpstatuscurrentservicestatussummary这次只是工作总结,因为时间紧没做'好好学习socketio可能有些地方会出错,但是我100%保证这是我自己测试的,提到的坑都是按部就班的。如有错误,欢迎指教^_^