本文实例讲述了ThinkPHP5.0框架结合Swoole开发实现WebSocket在线聊天案例。分享给大家供大家参考,具体如下:
ThinkPHP使用Swoole需要安装 think-swoole Composer包,前提系统已经安装好了Swoole PECL 拓展(相关文章:Linux下源码包安装使用Swoole扩展)
在tp5的项目根目录下执行composer命令安装think-swoole:
composer require topthink/think-swoole
安装成功:
话不多说,直接上代码:
新建WebSocket.php控制器:
(监听端口要确认服务器放行,宝塔环境还需要添加安全组规则)
<"用户{$uid}建立了连接,标识为{$fd}\n"; } //接收数据时回调函数 public function onMessage($server,$frame) { $fd = $frame->fd; $message = $frame->data; //省略通过fd查询用户uid逻辑...... $uid = 666; $data['uid'] = $uid; $data['message'] = '用户'.$uid.'发送了:'.$message; $data['post_time'] = date("m/d H:i",time()); $arr = array('status'=>1,'message'=>'success','data'=>$data); //仅推送给当前连接用户 //$server->push($fd, json_encode($arr)); //推送给全部连接用户 foreach($server->connections as $fd) { $server->push($fd, json_encode($arr)); } } //连接关闭时回调函数 public function onClose($server,$fd) { echo "标识{$fd}关闭了连接\n"; } }
前端演示页面:
(省略控制器判断登录状态、分配数据逻辑......)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" /> <title>Chat</title> <link rel="stylesheet" type="text/css" href="/static/liaotian/chat.css" rel="external nofollow" /> <script src="/UploadFiles/2021-04-02/jquery.min.js">服务器移到项目根目录开启服务:
php public/index.php Websocket/start
(这里的路径,是因为我绑定了home模块为默认模块,tp5默认情况是:
php public/index.php index/Websocket/start
)开启成功,查看端口已经被监听:
lsof -i:9501
演示效果如下:
服务器监听如下:
用户每刷新重连一次,fd标识都会改变。
更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《Zend FrameWork框架入门教程》及《PHP模板技术总结》。
希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
桃源资源网 Design By www.nqtax.com
暂无“ThinkPHP5.0框架结合Swoole开发实现WebSocket在线聊天案例详解”评论...