最近公司拓展業務,須要作一個即時聊天業務,就順帶研究了一下swoole,文檔地址貼出來:https://wiki.swoole.com/javascript
文檔寫得很詳細,demo也很簡潔明瞭,因此廢話就很少說了。php
工具:centOS、php、swoole、websockethtml
1.服務端代碼,文件命名爲start.phpjava
<?php //建立websocket服務器對象,監聽0.0.0.0:9502端口 $server = new swoole_websocket_server("0.0.0.0", 9502); //監聽WebSocket鏈接打開事件 $server->on('open', function (swoole_websocket_server $server, $request) { //實現多人通訊,須要將鏈接標識fd存儲起來,最簡便的辦法就是寫文件,不習慣的話能夠選擇更高大上的處理方式 file_put_contents( __DIR__ .'/log.txt' , $request->fd); }); //監聽WebSocket消息事件 $server->on('message', function (swoole_websocket_server $server, $frame) { $fd_msg = file_get_contents( __DIR__ .'/log.txt'); //fd是從1開始的哦,不然會報錯 for ($i=1 ; $i<= $fd_msg; $i++) { $server->push($i, $frame->fd.' 說: '.$frame->data);//循環廣播 } }); //監聽WebSocket鏈接關閉事件 $server->on('close', function ($ser, $fd) { echo "client {$fd} closed\n"; }); //開啓服務 $server->start();
2.在服務端運行該文件,使用 php start.php命令web
3.編輯一個客戶端頁面,命名爲send.php服務器
<!DOCTYPE html> <html> <head> <title></title> <meta charset="UTF-8"> <script type="text/javascript"> var ws = new WebSocket("ws://192.168.1.124:9502");//這裏是服務器的地址,若是用於本地測試,本地host請務必也使用該地址,能夠不加端口號 ws.onopen = function (event) { ws.send('ws connect success!'); }; function message(callback) { ws.onmessage = function (event) { var data = event.data; callback(data); } } function info(str) { var div = document.createElement('div'); div.innerHTML=str; var container = document.getElementById('container'); container.appendChild(div); } message(info); </script> </head> <body> <div id="container"></div> <input type="text" id="content"> <button onclick="ws.send( document.getElementById('content').value )">發送</button> </body> </html>
4.配置好虛擬機,執行一下看一看websocket
頁面寫得很糙,懶得寫了,若是有興趣能夠華麗麗地寫一個高的大的頁面哦。swoole