Swoole 快速起步:創建 WebSocket 服務器(聊天室)

HTTP 協議一樣,WebSocket  協議 也是建立在 TCP/IP協議  基礎上的協議 ,但不一樣的是 HTTP 協議 爲單向協議,即瀏覽器只能向服務器請求資源,服務器才能將數據傳送給瀏覽器。 WebSocket 協議 是一種雙向通信協議,在建立連接後,WebSocket服務器和 Browser/UA 都能主動的向對方發送或接收數據!

WebSocket 服務器腳本

1. 創建腳本:ws_server.php

<?php
// 創建websocket服務器對象,監聽 0.0.0.0:9501 端口
$server = new Swoole\WebSocket\Server("0.0.0.0", 9501);

// 配置
// $server->set([]);

// 監聽 WebSocket 連接打開事件
$server->on('open', function ($server, $request) {
    foreach ($server->connections as $key => $fd) {
        // 遍歷發送加入文案
    	$server->push($fd,"Welcome User_{$request->fd} joined this chat room.");
    }
});

// 監聽 WebSocket 消息事件
$server->on('message', function ($server, $frame) {

    foreach ($server->connections as $k => $v) {
        // 羣發消息
        $server->push($v, "User_".$frame->fd.":".$frame->data);
    }
});

// 監聽關閉
$server->on('close', function ($ser, $fd) {
    echo "User_{$fd} closed\n";
});

// 啓用服務
$server->start();

2. 啓動服務:

php73 ./ws_server.php

3. 創建客戶端js腳本:ws_client.html

<!DOCTYPE html>
<html>
<head>
    <title>swoole test</title>
    <script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
</head>
<body>
<h1>swoole test</h1>
<div class="show-data"></div>
<input class="content">
<button class="send-btn">send</button>
<script>
    // server 地址
    var ws_url = "ws://kder.top:9501";
    var ws = new WebSocket(ws_url);
    // 點擊發送
    $(".send-btn").click(function () {
        var content = $(".content").val();
        // 給服務器發送文案
        ws.send(content);
        $(".content").val("");
    });

    // 監聽接收新消息
    ws.onmessage = function (ent) {
        // 展示
        $(".show-data").append(ent.data + "<br>");
    }

    // 關閉
    ws.onclose = function (ent) {
        console.log("onclose", ent);
    }
</script>

</body>
</html>


4. 瀏覽器訪問ws_client.html

>>>對比 && 總結 GatewayWorker 開發實時聊天功能的基本思路

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章