搜了一下,之前的不少類型文章,都是可能採集的,基本同樣,錯誤都同樣,因此本身寫了個,發來共享一下。javascript
我們但是抄襲文檔還有互聯網的,請確保你的服務器已經安裝swoole1.7.7+版本擴展,9502端口未佔用並且能夠開啓php
swoole文檔:https://wiki.swoole.com/wiki/...html
效果:java
swoole.html頁面web
<!DOCTYPE html> <html> <head> <title>swoole chat room</title> <meta charset="UTF-8"> <script type="text/javascript"> if(window.WebSocket){ var webSocket = new WebSocket("ws://101.200.223.48:9502"); webSocket.onopen = function (event) { //webSocket.send("Hello,WebSocket!"); }; webSocket.onmessage = function (event) { var content = document.getElementById('content'); content.innerHTML = content.innerHTML.concat('<p style="margin-left:20px;height:20px;line-height:20px;">'+event.data+'</p>'); } var sendMessage = function(){ var data = document.getElementById('message').value; webSocket.send(data); } }else{ console.log("您的瀏覽器不支持WebSocket"); } </script> </head> <body> <div style="width:600px;margin:0 auto;border:1px solid #ccc;"> <div id="content" style="overflow-y:auto;height:300px;"></div> <hr/> <div style="height:40px"> <input type="text" id="message" style="margin-left:10px;height:25px;width:450px;"> <button onclick="sendMessage()" style="height:28px;width:75px;">發送</button> </div> </div> </body> </html>
swoole.php代碼:瀏覽器
<?php $ws = new swoole_websocket_server("0.0.0.0", 9502); // 設置配置 $ws->set( array( 'daemonize' => false, // 是不是守護進程 'max_request' => 10000, // 最大鏈接數量 'dispatch_mode' => 2, 'debug_mode'=> 1, // 心跳檢測的設置,自動踢掉掉線的fd 'heartbeat_check_interval' => 5, 'heartbeat_idle_time' => 600, ) ); //監聽WebSocket鏈接打開事件 $ws->on('open', function ($ws, $request) { $ws->push($request->fd, "hello, welcome to chatroom\n"); }); //監聽WebSocket消息事件,其餘:swoole提供了bind方法,支持uid和fd綁定 $ws->on('message', function ($ws, $frame) { $msg = 'from'.$frame->fd.":{$frame->data}\n"; // 分批次發送 $start_fd = 0; while(true) { // connection_list函數獲取如今鏈接中的fd $conn_list = $ws->connection_list($start_fd, 100); // 獲取從fd以後一百個進行發送 var_dump($conn_list); echo count($conn_list); if($conn_list === false || count($conn_list) === 0) { echo "finish\n"; return; } $start_fd = end($conn_list); foreach($conn_list as $fd) { $ws->push($fd, $msg); } } }); //監聽WebSocket鏈接關閉事件 $ws->on('close', function ($ws, $fd) { echo "client-{$fd} is closed\n"; $ws->close($fd); // 銷燬fd連接信息 }); $ws->start();
而後直接php swoole.php啓動swoole就行,多個瀏覽器訪問swoole.html頁面,能夠模擬聊天室,查看推送。服務器