- 启动HttpServer服务端
<?php
$http = new swoole_http_server("0.0.0.0", 8888);
$http->set([
'enable_static_handler'=>true,
'document_root' => '/home/wwwroot/default
/swool/demo/server/data'
//设置终端执行保存的静态路径
]);
$http->on('request', function ($request, $response) {
$response->end("<h1>Hello Swoole. #".rand(1000, 9999)."</h1>");
});
$http->start();
?>
- 测试连接
- WebSocket服务器是建立在Http服务器之上的长连接服务器,客户端首先会发送一个Http的请求与服务器进行握手
握手成功后会触发onOpen事件,表示连接已就绪,onOpen函数中可以得到$request对象,包含了Http握手的相关信息,如GET参数、Cookie、Http头信息等。
<?php
$server = new swoole_websocket_server("0.0.0.0", 9501);
//$server->set([]); 可以设置一些参数
//监听_websocket打开事件
$server->on('open', 'onOpen');
function onOpen($server,$request){
print_r("我是收到的客户端连接ID:".$request->fd);
//$fd 客户端连接的ID,如果指定的$fd对应的TCP连接并非websocket
客户端,将会发送失败https://wiki.swoole.com/wiki/page/399.html
}
//监听ws的消息事件
$server->on('message', function (swoole_websocket_server
$server, $frame) {
echo "receive from {$frame->fd}:{$frame->data},
opcode:{$frame->opcode},fin:{$frame->finish}\n";
//websocket客户端连接推送数据,长度最大不得超过2M。
$server->push($frame->fd, "this is server");
});
$server->on('close', function ($ser, $fd) {
echo "client {$fd} closed\n";
});
$server->start();
- WebSocket client 端
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,
initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<h1>websocket客户端测试</h1>
<script type="text/javascript">
// 打开一个 web socket
var ws = new WebSocket("ws://47.94.166.123:9999/");
ws.onopen = function()
{
// Web Socket 已连接上,使用 send方法发送数据
ws.send("发送数据");
console.log("数据发送中...");
};
ws.onmessage = function (evt)
{
var received_msg = evt.data;
console.log(received_msg,2222);
};
ws.onclose = function()
{
// 关闭 websocket
alert("连接已关闭...");
};
</script>
</body>
</html>
文档地址:https://wiki.swoole.com/wiki/page/479.html