当前位置: 首页 > news >正文

开发业务(3)——swoole和聊天室入门开发

 在普通的PHP代码里面,我们不需要考虑性能和异步问题,包括不限于我们想要使用php搭建一个http服务器(在node/python/go里面都有http模块,但是PHP没有这种功能)。而同样的原因,很难实现php游戏的开发,需要webSocket长链接和异步相关处理。

  安装(win服务器上安装比较费劲,不建议win运行swoole),我们已经搭建了我们的后台服务器管理中心。直接到PHP扩展里面安装即可,如果想要手动安装,需要按照官方的命令去安装,服务器管理后台会自动帮我们配置好。



开始测试搭建一个swoole的http服务器(官方的demo)

然后直接使用php  demo.php挂起到服务器里面(如果要守护)

这样就表示我们搭建swoole实现成功。我们也可以在进程里面看下9501的端口,直接lsof | grep “9501” 可以看到当前进程在运行,这样就完成了一个简单的http服务器搭建。也就是swoole最简单的使用。

  

现在我们加深难度,我们要创造一个webSocket 并进行调试。同样我们使用官方的webSocket代码。

使用php  demo.php 直接跑起来,只要显示成功即表示我们的webSocket服务器成功链接。然后使用我们的APIFOX增加webSocket接口调试功能

发送一条消息,简单成功:

这样表示已经和服务器建立了链接。我们客户端不断发出请求,服务器可以很快速度响应,不用跟http协议一样反复断开和链接,效率大幅度提升。

Websocket通讯成功,API调试接口也成功,现在继续加深难度,我们搭建一个简单的多人聊天室,同时告知各个在线的情况。依旧很简单:

 多人聊天室最简单的情况:
// 创建一个 Swoole HTTP 服务器
$server = new Swoole\Websocket\Server("0.0.0.0", 9501);
// 监听 WebSocket 连接打开事件
$server->on('open', function (Swoole\Websocket\Server $server, $request) {echo "New connection: {$request->fd}\n";
});// 监听 WebSocket 消息事件
$server->on('message', function (Swoole\Websocket\Server $server, $frame) {echo "Received message: {$frame->data}\n";// 广播消息给所有客户端foreach ($server->connections as $fd) {$server->push($fd, $frame->fd.':'.$frame->data);}
});// 监听 WebSocket 连接关闭事件
$server->on('close', function ($server, $fd) {echo "Connection close: {$fd}\n";
});
echo  "聊天室启动";
// 启动服务器
$server->start();

对话聊天窗口

我们已经完成了一个最简单的群聊天逻辑,现在我们将系统继续复杂化,就是允许客户端定义自己的昵称,同时离开的时候,也要告诉其他人昵称谁来了,谁走了。(和我们WX群聊天已经有点类似)这个时候,我们需要定义参数:

// 创建一个 Swoole HTTP 服务器
$server = new Swoole\Websocket\Server("0.0.0.0", 9501);
$uid = 0 ;
$username = '' ;
$touid = 0 ;
$account = ['uid'=>$uid,'username'=>$username,'touid'=>$touid,'fd'=>0
];
// 监听 WebSocket 连接打开事件
$server->on('open', function (Swoole\Websocket\Server $server, $request)use (&$account) {$account['uid'] = $request->get['uid'];$account['username'] = $request->get['username'];$account['touid'] = $request->get['touid'];$account['fd'] =    $request->fd ;echo "New connection: { $request->fd}\n";foreach ($server->connections as $fd) {$server->push($fd,  $account['username']."来了");}
});// 监听 WebSocket 消息事件
$server->on('message', function (Swoole\Websocket\Server $server, $frame)use  (&$account) {// 广播消息给所有客户端foreach ($server->connections as $fd) {$server->push($fd, $account['username'].':'.$frame->data);}
});// 监听 WebSocket 连接关闭事件
$server->on('close', function ($server, $fd) use  (&$account){echo "Connection close: {$fd}\n";// 广播消息给所有客户端foreach ($server->connections as $fd) {$server->push($fd, $account['username'].'潇洒的离开了');}
});
echo  "聊天室启动";
// 启动服务器
$server->start(); 

加入的昵称已经实现:

小结: 简单的多人聊天室后端已经完成,前端使用的是API调试工具,已经可以看到来去昵称。掌握swoole 搭建http服务器,理解webSocket 搭建webSocket服务器,掌握APIfox调试WS协议的方法,完成基础的swoole用法,包括变量获取和交互。

http://www.lryc.cn/news/409659.html

相关文章:

  • Linux系统服务——【web,http协议,apache服务和nginx服务】(sixteen day)
  • 100、Python 关于时间日期的一些操作
  • 【精通Redis】Redis命令详解
  • 项目经理的开源工具指南:优化您的选择过程
  • 如何防御IP劫持
  • C++绝对值
  • C# dataGridView 去掉左边多出来空列
  • esp32
  • IDEA 本地有jar包依赖文件,但是所有引用的jar包全部爆红
  • 如何在调整节拍时间的过程中保持生产流程的稳定性?
  • 3. Docker的数据管理与持久化
  • Logback原理及应用详解(九)
  • SpringBoot 禁用RabbitMQ自启动
  • unity 实现图片的放大与缩小(根据鼠标位置拉伸放缩)
  • Scrapy 爬取旅游景点相关数据(五)
  • 程序员纯粹八股文的危害有哪些,应该如何来解决?
  • LabVIEW操作系列1
  • 【前端 09】JavaScript中的对象与JSON
  • C# 字符串罗马数字123转汉字一二三
  • 红杉资本视角:大公司在AI领域的投资策略与市场影响
  • CI/CD学习之路
  • IP 泄露: 原因与避免方法
  • 深⼊理解指针(1)
  • Photoshop 2023:创意无限的图像编辑神器
  • 高校是需要AIGC 实验室还是大数据人工智能实验室呢
  • Nginx系列-12 Nginx使用Lua脚本进行JWT校验
  • 数据库设计三范式
  • VirtualBox创建共享磁盘
  • 2024年中职云计算实验室建设及云计算实训平台整体解决方案
  • [C++] C++11新增