本帖最后由 上海分校-小影 于 2018-11-30 13:20 编辑
PHP新增的swoole,可以实现即时聊天功能,这是一大亮点呀.WebSocket服务器是建立在Http服务器之上的长连接服务器,客户端首先会发送一个Http的请求与服务器进行握手
握手成功后会触发onOpen事件,表示连接已就绪,onOpen函数中可以得到$request对象,包含了Http握手的相关信息,如GET参数、Cookie、Http头信息等。
废话不多说了,就上代码吧!
websocket.php的文件
<?php ###注意:fd指客户端唯一标识(每建立一个连接都有一个唯一标识,后期就通过该标识通信)
#1.创建websocket服务 $server = new swoole_websocket_server("0.0.0.0", 8003); #2.握手成功,触发回调函数 $server->on('open', function (swoole_websocket_server $server, $request) { echo "server: handshake success with fd{$request->fd}\n"; }); #3.收到消息,触发回调函数 $server->on('message', function (swoole_websocket_server $server, $frame) { // 在服务器端输出消息,每一个链接的fd都是不一样的 echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n"; // 将数据返回给客户端 // 两个参数,参数1:发给谁,参数2:发的什么内容 $server->push($frame->fd, "this is server"); }); #3.关闭连接,触发回调函数 $server->on('close', function ($ser, $fd) { echo "client {$fd} closed\n"; }); #4.启动websocket服务 $server->start(); 创建test.html文件,当做客户端
<!DOCTYPE html><html><head> <title></title> <meta charset="utf-8"></head><body> <textarea id="textarea"></textarea> <br /> <input type="button" value="发送数据" /> <script type="text/javascript"> //创建websocket对象 var ws = new WebSocket("ws://192.168.184.128:8003"); //握手成功出发 ws.onopen = function() { console.log("连接成功"); }; //收到socket服务消息,则触发回调函数 ws.onmessage = function(event) { var data = event.data; console.log("收到socket服务消息,内容:" + data); }; function send() { var data = document.getElementById('textarea').value; ws.send(data); }</body>感兴趣的赶紧过来试一试吧,惊喜连连
|