首先,我在我服務器上照著官方的教程安裝了swoole擴展,不容易啊,中間出現了很多波折,php裝的版本還是一個大問題,enjoy the process to install swoole extension. Swoole官方鏈接:https://www.swoole.com/ 文檔鏈接:https://wiki.swoole.com/ webSocket鏈接:https://wiki.swoole.com/wiki/page/397.html
下面是我寫的服務器上面的ws.php(其實就是拷貝一下官方的例子就行):
<?php
$server = new swoole_websocket_server("0.0.0.0",9200);
$server->on('open',function(swoole_websocket_server $server,$request){
echo "server: handshake success with fd{$request->fd}
";
});
$server->on('message',function(swoole_websocket_server $server,$frame){
echo "receive from {$frame->fd}:{$frame->data}";
echo "opcode:{$frame->opcode}";
echo "fin: {$frame->finish}
";
$server->push($frame->fd,"this is a server");
});
$server->on('close',function($ser,$fd){
echo "client {$fd} closed
";
});
$server->start();
?>
這裏我設置的是0.0.0.0,為的是可以遠程訪問,如果你是在自己電腦上安裝了PHP環境並且安裝了swoole擴展,可以直接使用localhost,端口我設置的是9200,你可以設置為一個你想設置的端口,只要不和現有的端口沖突就行。
這樣的話,我在服務器上面運行這個文件:
php ws.php
這樣服務器上面就正在運行一個swoole server,等待著客戶端的連接請求。
OK,做到這裏你已經成功了一大半了,很棒的說!
下面就是測試了,這很有趣的,因為你吃了很多苦頭,現在正是收貨的時候了哈哈。
本地新建文件testWebSocket.html,上代碼:
<!doctype html>
<html>
<head>
<title>測試WebSocket</title>
</head>
<body>
<script>
var ws = new WebSocket("ws://120.79.70.19:9200");
ws.onopen = function(event){
console.log("客戶端已連接上!");
ws.send("hello server,this is client!");
};
ws.onmessage= function(event){
console.log("服務器傳過來的數據是:"+event.data);
}
ws.onclose = function(event){
console.log("連接已關閉");
};
</script>
</body>
</html>
成功! 祝賀!
我們可以看到先建立連接也就是握手然後收到客戶端發來的消息,然後給客戶端回了消息,然後瀏覽器關閉了html文件的時候就代表這個連接已經關閉。
我剛開始接觸websocket,認為應該就是服務器可以主動給客戶端發消息了吧。啃書去…
end.