黑马程序员技术交流社区
标题: 【上海校区】swoole的聊天技术 [打印本页]
作者: 冯程程 时间: 2018-11-29 15:52
标题: 【上海校区】swoole的聊天技术
本帖最后由 上海分校-小影 于 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>感兴趣的赶紧过来试一试吧,惊喜连连
作者: 不二晨 时间: 2018-12-5 16:49
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |