多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
``` ​<?php # 定义clientFds数组 保存所有websocket连接 $clientFds = []; # 创建websocket服务 $server = new swoole_websocket_server("0.0.0.0", 9300); # 握手成功 触发回调函数 $server->on('open', function (swoole_websocket_server $server, $request) use (&$clientFds) { # echo "server: handshake success with fd{$request->fd}\n"; # 将所有客户端连接标识,握手成功后保存到数组中 $clientFds[] = $request->fd; }); # 收到消息 触发回调函数 $server->on('message', function (swoole_websocket_server $server, $frame) use (&$clientFds) { # echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n"; # $server->push($frame->fd, "this is server"); # 当有用户发送信息,发送广播通知所有用户 foreach ($clientFds as $fd) { $server->push($fd, $frame->data); } }); # 关闭连接 触发回调函数 $server->on('close', function ($ser, $fd) use (&$clientFds) { # echo "client {$fd} closed\n"; # 关闭会话 销毁标识fd # 根据value 去数组中找对应的key $res = array_search($fd, $clientFds, true); unset($clientFds[$res]); }); # 启动websocket服务 $server->start(); ``` 用 php 空格 文件名 来运行上面的代码。 HTML: ~~~html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>WebSocket聊天室</title> </head> <body> 聊天窗口: <div id="main" style="width:600px;height: 300px; overflow: auto;border: solid 2px black;"> </div> <textarea id="textarea" placeholder="在这里输入信息"></textarea> <br /> <input type="button" value="发送聊天" id="send"> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript"> var myDate = new Date(); var name = prompt("请输入您的昵称", ""); //弹出input框 // 打开一个 web socket var ws = new WebSocket("ws://118.24.102.209:9300"); ws.onopen = function () { console.log("连接成功"); }; //收到消息 触发回调 ws.onmessage = function (evt) { var data = evt.data; console.log("收到socket服务消息,内容:" + data); $('#main').append("<p>" + data + "</p>"); }; $('#send').click(function(){ // alert(123); var data = $('#textarea').val(); console.log(name); console.log(data); ws.send(name + ":" + data); }) ws.onclose = function () { // 关闭 websocket console.log("连接已关闭..."); }; </script> </body> </html> ~~~ ![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动") 当输入名字后,F12查看我们输出的信息,显示的是websocket连接成功。 这时我们多开几个窗口连接我们的websocket服务器。 并输入名字测试,在聊天窗口上观察数据。 ![](https://img-blog.csdnimg.cn/20191028134543336.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NTM1ODA3,size_16,color_FFFFFF,t_70)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")​编辑 ​