首頁 後端開發 php教程 如何在PHP中使用WebSocket

如何在PHP中使用WebSocket

Jun 11, 2023 pm 06:09 PM
php 使用 websocket

隨著網路技術的發展,WebSocket(即Web套接字)已經成為了一種流行的協議,它可以在瀏覽器和伺服器之間建立一個保持連接的即時通訊通道。這種協定在實現 Web 應用程式中的即時通訊功能方面發揮了巨大的作用。

在PHP開發領域中,WebSocket的應用越來越廣泛。在本文中,我們將介紹如何在PHP中使用WebSocket。

  1. 安裝WebSocket函式庫

首先,我們需要用到一個PHP WebSocket函式庫,以便在PHP中輕鬆地實作WebSocket的功能。目前最受歡迎的PHP WebSocket庫有Ratchet和PHP WebSocket。

在這裡我們使用Ratchet,它採用了ReactPHP函式庫來實現非同步事件驅動的PHP,並且完美相容於其他框架,具備了靈活性和可擴充性。

在開始之前,我們需要先安裝Composer,因為Ratchet是使用Composer安裝和管理的。

可以在此處下載Composer:https://getcomposer.org/

使用Composer安裝Ratchet:

composer require cboden/ratchet
登入後複製
  1. 編寫PHP WebSocket伺服器

在本例中,我們要實作一個簡單的聊天室,使用Ratchet編寫WebSocket伺服器。以下是實現的步驟:

a. 建立WebSocket伺服器

use RatchetServerIoServer;
use RatchetHttpHttpServer;
use RatchetWebSocketWsServer;

require dirname(__DIR__) . '/vendor/autoload.php';

$server = IoServer::factory(
    new HttpServer(
        new WsServer(
            new Chat()
        )
    ),
    8080
);

$server->run();
登入後複製

這裡首先引入了Ratchet庫,然後創建了一個WebSocket伺服器,使用HttpServer和WsServer分別指定HTTP和WebSocket協定支持,並將它們傳遞給Chat類別(稍後將展示Chat類別被用於處理客戶端連線請求)。

這裡我們監聽8080埠。

b. 建立聊天室

use RatchetMessageComponentInterface;
use RatchetConnectionInterface;

class Chat implements MessageComponentInterface
{
    public $clients;

    public function __construct()
    {
        $this->clients = new SplObjectStorage;
    }

    public function onOpen(ConnectionInterface $conn)
    {
        $this->clients->attach($conn);
    }

    public function onMessage(ConnectionInterface $from, $msg)
    {
        foreach ($this->clients as $client) {
            if ($client !== $from) {
                $client->send($msg);
            }
        }
    }

    public function onClose(ConnectionInterface $conn)
    {
        $this->clients->detach($conn);
    }

    public function onError(ConnectionInterface $conn, Exception $e)
    {
        $conn->close();
    }
}
登入後複製

這裡,我們建立了一個名為Chat的類,實作了MessageComponentInterface介面。這個介面定義了WebSocket伺服器在不同連線狀態下執行的操作。

具體來說,我們在建構函式中宣告了一個clients變量,這是儲存連接客戶端的SplObjectStorage物件。在onOpen方法中,連接物件被指派到這個變數中。

當有來自任何客戶端的訊息時,我們透過onMessage方法廣播訊息,對於每個連線都會接收到。

在onClose方法中,連接物件將從變數中移除。如果發生錯誤,無法處理客戶端連接,那麼我們的onError函數將會呼叫。

  1. 編寫客戶端JavaScript程式碼

接下來,我們需要客戶端JavaScript程式碼來連接WebSocket伺服器。

let socket = new WebSocket('ws://localhost:8080');
socket.onopen = function(event) {
  console.log('WebSocket连接已建立');
};

socket.onmessage = function(event) {
  console.log('收到消息:' + event.data);
};
登入後複製

這裡我們直接使用WebSocket物件的API進行連線和對伺服器發送和接收訊息。

  1. 運行WebSocket伺服器

當你完成上述步驟時,你已經成功地寫了一個WebSocket伺服器。現在運行你的伺服器,可以透過命令列運行:

php server.php
登入後複製

當命令列啟動伺服器時,你應該會看到類似如下的類似結果:

2019-03-22 11:46:55 WebSocketServer: Listening on 0.0.0.0:8080
2019-03-22 11:52:50 WebSocketServer: Opened connection to http://localhost:54616
登入後複製

表示WebSocket服務已成功啟動並監聽在8080埠上。

  1. 測試WebSocket連線

最後,開啟瀏覽器,造訪 http://localhost/chat.html,可以看到瀏覽器連線並加入WebSocket伺服器。

let socket = new WebSocket('ws://localhost:8080');
socket.onopen = function(event) {
  console.log('WebSocket连接已建立');
  socket.send('欢迎加入聊天室');
};

socket.onmessage = function(event) {
  console.log('收到消息:' + event.data);
};
登入後複製

這裡,我們將訊息傳送到伺服器,並在接收伺服器訊息時將其記錄在控制台中。

執行測試網頁時,在控制台看到類似如下的輸出:

WebSocket已连接
WebSocket收到消息:欢迎加入聊天室
登入後複製

現在,你已經成功地在PHP中使用WebSocket,並創建了一個簡單的聊天室。希望這個教程能夠對你有幫助。

以上是如何在PHP中使用WebSocket的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南

CakePHP 專案配置 CakePHP 專案配置 Sep 10, 2024 pm 05:25 PM

CakePHP 專案配置

CakePHP 日期和時間 CakePHP 日期和時間 Sep 10, 2024 pm 05:27 PM

CakePHP 日期和時間

CakePHP 檔案上傳 CakePHP 檔案上傳 Sep 10, 2024 pm 05:27 PM

CakePHP 檔案上傳

CakePHP 路由 CakePHP 路由 Sep 10, 2024 pm 05:25 PM

CakePHP 路由

討論 CakePHP 討論 CakePHP Sep 10, 2024 pm 05:28 PM

討論 CakePHP

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發

CakePHP 快速指南 CakePHP 快速指南 Sep 10, 2024 pm 05:27 PM

CakePHP 快速指南

See all articles