Swoole消息推送


socket.php

// 注釋的部分是學習的筆記

<?php
//創建websocket服務器對象,監聽0.0.0.0:9502端口
$ws = new swoole_websocket_server("0.0.0.0", 9501);

//監聽WebSocket連接打開事件
/**
 * 客戶端想服務器發送信息是調用函數
 * $ws   websocket 服務器
 * $request 客戶端信息
 * $request->fd 客戶端唯一編號
 *
 * */
$ws->on('open', function ($ws, $request) {
    //var_dump($request->fd, $request->get, $request->server);
    //$ws->push($request->fd, "hello, welcome\n");
    echo "connection open:{$request->fd}\n";
    //$ws->push($request->fd, json_encode(['hello','world']));
});

//監聽WebSocket消息事件
/**
 * $frame 客戶端發送的信息
 * $frame->fd 客戶端的唯一編號
 * $frame->data 客戶端發送的信息
 * */
$ws->on('message', function ($ws, $frame) {
    //echo "接收到的信息: {$frame->data}\n";
    //$ws->push($frame->fd, "server: {$frame->data}");
    //echo "服務器已接收:【".$frame->fd."】";
    //$ws->push($frame->fd, json_encode(['hello','world'.$frame->data]));


    // 1.客戶端發送過來的信息
    $content = $frame->data;
    echo "服務器接收到信息:".$content;
    // 2.講消息發送個所有客戶端
    foreach ($ws->connections as $fd){
        $ws->push($fd,$content);
    }
});

//監聽WebSocket連接關閉事件
$ws->on('close', function ($ws, $fd) {
    echo "client-{$fd} is closed\n";
    echo "已斷開鏈接:{$fd}";
});

$ws->start();

 

 

客戶端顯示數據:socket.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>客戶端顯示數據</title>
    <script type="text/javascript" src="https://code.jquery.com/jquery-3.3.1.min.js" ></script>
</head>
<body>
<ul id="show">

</ul>
</body>
<script>

    $(function(){
        //1.創建websocket客戶端
        var wsServer = 'ws://192.168.70.167:9501';
        var websocket = new WebSocket(wsServer);

        //2.注冊事件
            //2.1 當客戶端和服務器簡歷連接時執行該函數
            websocket.onopen = function(){
                //console.log("連接上了服務器");
                addStr("連接上了服務器")
            }
            //2.2 當服務器想客戶端發送消息時 執行該函數
            // event.data 就是服務器發送過來的信息
            websocket.onmessage = function(event){
                console.log("接收到服務器發送的信息:"+event.data);
                addStr(event.data);

            }
            // 2.3 當客戶端和服務器斷開連接時執行函數
            websocket.onclose = function(event){
                console.log("斷開了鏈接");
            }

    });

    /*websocket.onopen = function(){
        //console.log("連接上了服務器");
        websocket.send("連接上了服務器")
    }*/
    function addStr(str){
        $str = "<li>"+str+"</li>";
        $("#show").append($str);
    }
</script>
</html>

 

 

客戶端發送數據:socket_add.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>客戶端顯示數據</title>
    <script type="text/javascript" src="https://code.jquery.com/jquery-3.3.1.min.js" ></script>
</head>
<body>
<ul id="show">

</ul>
</body>
<script>

    $(function(){
        //1.創建websocket客戶端
        var wsServer = 'ws://192.168.70.167:9501';
        var websocket = new WebSocket(wsServer);

        //2.注冊事件
            //2.1 當客戶端和服務器簡歷連接時執行該函數
            websocket.onopen = function(){
                //console.log("連接上了服務器");
                addStr("連接上了服務器")
            }
            //2.2 當服務器想客戶端發送消息時 執行該函數
            // event.data 就是服務器發送過來的信息
            websocket.onmessage = function(event){
                console.log("接收到服務器發送的信息:"+event.data);
                addStr(event.data);

            }
            // 2.3 當客戶端和服務器斷開連接時執行函數
            websocket.onclose = function(event){
                console.log("斷開了鏈接");
            }

    });

    /*websocket.onopen = function(){
        //console.log("連接上了服務器");
        websocket.send("連接上了服務器")
    }*/
    function addStr(str){
        $str = "<li>"+str+"</li>";
        $("#show").append($str);
    }
</script>
</html>

 

運行服務端

php socket.php

 

運行客戶端

客戶端顯示數據:192.168.70.168:9501/socket.html (可以打開多個窗口,查看數據)

客戶端發送數據:192.168.70.168:9501/socket_add.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM