什么是swoole? swoole的作用是什么?
首先swoole的介绍 :Swoole是一个为PHP用C和C++编写的基于事件的高性能异步&协程并行网络通信引擎。听起来很高大上,其实简单来说就是利用C和C++编写的PHP的一个扩展,类似于gd,mysql,pdo等扩展一样
Swoole的强大功能 :高性能的异步并发 TCP、UDP、Unix Socket、HTTP,WebSocket 服务,简单来讲,就是之前PHP专注于web端,现在的PHP什么都可以做。
利用原生swoole实现简单的聊天系统
为了方便大家理解,直接采用代码加注释的方式来展现(前提是要会安装swoole扩展并跑通)
<?php //服务端代码 //创建websocket服务器并监听9501 端口 $ws = new Swoole\WebSocket\Server('0.0.0.0',9501); //当用户连接后,执行的函数 $ws->on('open',function ($ws,$request){ //控制台中输出 echo "新用户 {$request->fd} 加入了\n"; //将用户的fd存到全局变量中,并设置用户的默认昵称 $GLOBALS['user'][$request->fd]['id'] = $request->fd; $GLOBALS['user'][$request->fd]['name'] = "匿名用户".mt_rand(1000,9999); }); //当收到消息时,执行的函数 $ws->on('message',function ($ws,$data){ //要返回的消息内容 $mgs = $GLOBALS['user'][$data->fd]['name'].": " .$data->data; //循环每个在线用用户 foreach ($GLOBALS['user'] as $user) { //向每个在线的用户推送消息 $ws->push($user['id'],$mgs); } }); //当用户断开连接时,执行的函数 $ws->on('close',function ($ws,$fd){ //控制台中输出 echo "用户 {$fd} 已掉线\n"; //当用户掉线后,清除掉全局变量中的用户信息 unset($GLOBALS['user'][$fd]); }); //启动websocket服务 $ws->start();
//前端代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div style="width: 60%;height: 100%;border: 1px solid #ccc;margin: 0 auto;"> <!-- 消息显示框--> <div id="msg" style="width: 100%;height: 400px;text-align: center;"></div> <div style="text-align: center;margin-bottom: 20px;"> <!-- 输入消息框--> <input type="text" id="text" > <!-- 发送按钮--> <input type="submit" onclick="send();" value="发送消息"> </div> </div> <script> //连接websocket服务端,并创创建 WebSocket 对象 var wsServer = "ws://106.14.40.226:9501"; var webSocket = new WebSocket(wsServer); //获取消息显示div的dom元素 var msg = document.getElementById('msg'); //当用户连接后,简单输出一下 webSocket.onopen = function (res) { console.log('连接成功'); } //当收到用户消息后 webSocket.onmessage = function (res) { //追加收到的消息到消息列表 msg.innerHTML += res.data + "<br>"; console.log(res.data); } //当关闭连接后 webSocket.onclose = function (res) { console.log('服务器拒绝'); } //当发生错误后 webSocket.onerror = function (res,e) { console.log('error'); } //点击发送按钮,实现获取输入框数据并发送 function send() { var text = document.getElementById('text').value; webSocket.send(text); } </script> </body> </html>
效果展示
以上就是用swoole实现的一个简单的IM聊天,想要获取最新swoole教程欢迎关注编程学习网
扫码二维码 获取免费视频学习资料
- 本文固定链接: http://phpxs.com/post/8365/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料
查 看2022高级编程视频教程免费获取