在线观看免费黄色网址_亚洲国产精品无码久久青草_少妇愉情理伦片高潮日本_欧美日本在线三级视频

WebSocket,php后端如何一對一發消息和收消息

實現(xian) WebSocket 的一對(dui)一消息通(tong)信涉及(ji)(ji)客(ke)(ke)戶(hu)端和服(fu)務(wu)器(qi)端兩(liang)個(ge)部(bu)分(fen)的編碼。我將為(wei)你(ni)提供一個(ge)基本(ben)的示例,展示如(ru)何使用 PHP(通(tong)過 Ratchet 庫)實現(xian)后端 WebSocket 服(fu)務(wu)器(qi),以(yi)及(ji)(ji)如(ru)何在客(ke)(ke)戶(hu)端設置發送者和接收者信息。

image.png

客戶端(前端)部分

在客戶端,通常使(shi)用 JavaScript 來實現 WebSocket 連(lian)接和消息發(fa)送。以(yi)下是一(yi)個簡單(dan)的(de)示例代碼(ma):


javascript代(dai)碼:

// 客戶端 WebSocket 連接

var socket = new WebSocket('ws://yourserveraddress:8080');


// 當連接打開時

socket.onopen = function() {

    console.log('WebSocket connected.');


    // 準備(bei)發送的消(xiao)息(xi)

    var message = {

        sender: 'sender_id',   // 發送者的(de)標識(shi),可以(yi)是(shi)用戶 ID 或其他標識(shi)符

        receiver: 'recipient_id',   // 接收者的(de)標識

        content: 'Hello!'     // 消息內容

    };


    // 發送消息給服(fu)務器

    socket.send(JSON.stringify(message));

};


// 監聽來自服務器的消(xiao)息

socket.onmessage = function(event) {

    var receivedMessage = JSON.parse(event.data);

    console.log('Message received from server:', receivedMessage);

    // 在這(zhe)里處理接收到的消息(xi)

};


// 錯誤處理

socket.onerror = function(error) {

    console.error('WebSocket error:', error);

};


// 連接關閉時(shi)的處理

socket.onclose = function(event) {

    if (event.wasClean) {

        console.log('WebSocket closed cleanly');

    } else {

        console.error('WebSocket connection closed unexpectedly');

    }

};

服務器端(PHP)部分

在服(fu)務器(qi)端,我們使用 PHP 和 Ratchet 庫來實現 WebSocket 服(fu)務器(qi),并處(chu)理客戶(hu)端發送過(guo)來的(de)消息(xi)。以(yi)下(xia)是一個簡單(dan)的(de)例子 server.php:


php代碼:

<?php

require __DIR__ . '/vendor/autoload.php';


use Ratchet\Server\IoServer;

use Ratchet\Http\HttpServer;

use Ratchet\WebSocket\WsServer;

use Ratchet\MessageComponentInterface;

use Ratchet\ConnectionInterface;


class Chat implements MessageComponentInterface {

    protected $clients;


    public function __construct() {

        $this->clients = new \SplObjectStorage;

    }


  &nbsp; public function onOpen(ConnectionInterface $conn) {

        // 存儲連(lian)接(jie)對象

        $this->clients->attach($conn);

        echo "New connection! ({$conn->resourceId})\n";

    }


&nbsp;   public function onMessage(ConnectionInterface $from, $msg) {

        $message = json_decode($msg);


        // 找(zhao)到(dao)接(jie)收者并(bing)發送消息

        foreach ($this->clients as $client) {

            if ($client !== $from &amp;& $message->receiver == $client->resourceId) {

&nbsp;               $client->send(json_encode([

                    'sender' => $message->sender,

                    'content' => $message->content

                ]));

                break;

            }

        }

    }


  &nbsp; public function onClose(ConnectionInterface $conn) {

        // 移除斷開的連接

        $this->clients->detach($conn);

        echo "Connection {$conn->resourceId} has disconnected\n";

    }


    public function onError(ConnectionInterface $conn, \Exception $e) {

        echo "An error has occurred: {$e-&gt;getMessage()}\n";

        $conn->close();

    }

}


// 啟動 WebSocket 服務(wu)器

$server = IoServer::factory(

    new HttpServer(

        new WsServer(

      &nbsp;     new Chat()

        )

    ),

    8080  // WebSocket 服務器端口

);


echo "WebSocket server running...\n";


$server->run();

解釋

客(ke)戶(hu)端部(bu)分:在客(ke)戶(hu)端,通過 WebSocket 連接(jie)發(fa)送一個 JSON 格式的消息,包含發(fa)送者(zhe)和接(jie)收者(zhe)的標識以及消息內(nei)容。

服務(wu)(wu)器端部(bu)分(fen):在 PHP 中,使用(yong) Ratchet 庫實現(xian)一個(ge) WebSocket 服務(wu)(wu)器。在 onMessage 方(fang)法中,服務(wu)(wu)器接收(shou)到消息后解析 JSON 數據(ju),查找與接收(shou)者匹配的客戶端連接,并將消息發(fa)送(song)給該客戶端。

注意事項

安全(quan)(quan)性(xing)(xing):這個示例(li)中沒有包(bao)括身(shen)份驗證或(huo)安全(quan)(quan)性(xing)(xing)檢(jian)查,實際應用中需要根據需求加強安全(quan)(quan)性(xing)(xing)措施(shi)。

異常處理:適當(dang)處理連接關閉、錯誤(wu)等異常情(qing)況(kuang),以確保服務器的穩定(ding)性(xing)和可靠性(xing)。

擴(kuo)展性:此(ci)示例是基(ji)于一對一通(tong)信,如果(guo)需要(yao)支持多對多或其他復雜的通(tong)信模式,需要(yao)相應調整(zheng)和擴(kuo)展。

通過這(zhe)些代碼示例(li),你(ni)可(ke)以實(shi)(shi)現基本的 WebSocket 一(yi)對一(yi)消息通信功(gong)能,在實(shi)(shi)際應用中可(ke)根據具體需求(qiu)進行擴(kuo)展和優(you)化(hua)。


上一篇:使用jQuery來讀寫cookie的代碼
下一篇:PHP編程中有哪些處理字符串,數據,數組的函數方法
?