websocket服务器的事件
事件名 | 作用 |
---|
HandShake | 在websocket客户端连接websocket服务器时,需要给websocket客户端发送握手响应 |
open | 已经和websocket客户端握手成功后,触发这个事件 |
message | 这个websocket服务器收到这个websocket客户端发送的消息时触发 |
close | 当这个websocket服务器和websocket客户端断开时触发这个事件 |
通过调用这个类swoole_websocket_server的push可以给websocket客户端发送消息
通过调用这个类swoole_websocket_frame的data属性可以得到websocket客户端发送给websocket服务器的消息
示例代码
server代码
<?php
$serv = new swoole_websocket_server('0.0.0.0',8000);
$serv->on('message',function(swoole_websocket_server $server, swoole_websocket_frame $frame){
$receive_data = $frame->data;
$send_data = (int)$receive_data+20;
$server->push($frame->fd, $send_data, 1, true);
});
$serv->start();
client代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>WebSocket</title>
</head>
<body>
<h1>Echo Test</h1>
<input type="text" id="sendTxt">
<button id="sendBtn">发送</button>
<div id="recv"></div>
<script type="text/javascript">
var websocket = new WebSocket("ws://192.168.144.128:8000");
websocket.onopen = function(){
console.log("websocket open");
document.getElementById("recv").innerHTML = "Connected";
}
websocket.inclose = function(){
console.log('websocket close');
}
websocket.onmessage = function(e){
console.log(e.data);
document.getElementById("recv").innerHTML = e.data;
}
document.getElementById("sendBtn").onclick = function(){
var txt = document.getElementById("sendTxt").value;
websocket.send(txt);
}
</script>
</body>
</html>
swoole_websocket_frame 结构详解
object(Swoole\WebSocket\Frame)
["fd"]=>int(5)
["finish"]=> bool(true)
["opcode"]=>int(1)
["data"]=>string(26) "你好 这里是客户端1"
}