首頁 php框架 Workerman Workerman網路程式設計進階:實現高並發即時通訊系統

Workerman網路程式設計進階:實現高並發即時通訊系統

Aug 05, 2023 pm 04:09 PM
高並行 workerman 網路程式設計

Workerman網路程式設計進階:實現高並發即時通訊系統

隨著行動互聯網的普及,即時通訊系統在我們的生活中扮演著越來越重要的角色。而實現一個高並發的即時通訊系統對於網路程式設計的學習來說是一個重要的里程碑。在本篇文章中,我們將利用Workerman框架來實現一個高並發的即時通訊系統,並透過程式碼範例詳細介紹實現的過程。

首先,我們需要安裝Workerman框架。 Workerman是一個輕量級的php非同步網路程式設計框架,它提供了豐富的網路程式設計功能,能夠滿足我們實現高並發即時通訊系統的需求。可以透過composer安裝Workerman,執行以下指令:

composer require workerman/workerman
登入後複製

安裝完成後,我們就可以開始寫實作高並發即時通訊系統的程式碼了。

  1. 建立伺服器類別

首先,我們建立一個伺服器類,用來處理客戶端的連線和訊息傳送。程式碼範例如下:

use WorkermanWorker;

class ChatServer
{
    protected $clients;
    
    public function __construct()
    {
        $this->clients = new SplObjectStorage;
        
        $ws_worker = new Worker('websocket://0.0.0.0:8000');
        
        $ws_worker->onConnect = function($connection) {
            $this->clients->attach($connection);
            echo "New client connected
";
        };
        
        $ws_worker->onMessage = function($connection, $data) {
            // 处理接收到的消息
            foreach ($this->clients as $client) {
                $client->send($data);
            }
        };
        
        $ws_worker->onClose = function($connection) {
            $this->clients->detach($connection);
            echo "Client disconnected
";
        };
        
        Worker::runAll();
    }
}

new ChatServer();
登入後複製

在上面的程式碼中,我們首先建立了一個Workerman的Worker對象,並設定其監聽的位址和連接埠為websocket://0.0.0.0:8000。然後定義了三個回呼函數,分別處理客戶端的連線、接收到的訊息和斷開連線。在onConnect回呼函數中,我們使用了SplObjectStorage來保存所有的客戶端連線物件。在onMessage回呼函數中,我們遍歷所有的客戶端連接對象,並向每個客戶端發送接收到的訊息。在onClose回呼函數中,我們從SplObjectStorage中刪除斷開連線的客戶端物件。

  1. 建立客戶端頁面

接下來,我們建立一個客戶端頁面,用來連接伺服器並發送接收訊息。程式碼範例如下:

<!DOCTYPE html>
<html>
<head>
    <title>Chat App</title>
    <style>
        #messages {
            height: 300px;
            overflow-y: scroll;
        }
    </style>
</head>
<body>
    <div id="messages"></div>
    <form id="form">
        <input type="text" id="message" autocomplete="off">
        <button>Send</button>
    </form>

    <script>
        const messages = document.getElementById('messages');
        const form = document.getElementById('form');
        const input = document.getElementById('message');
        
        const ws = new WebSocket('ws://localhost:8000');
        
        ws.onopen = function() {
            console.log('Connected to the server');
        };
        
        ws.onmessage = function(event) {
            const message = document.createElement('div');
            message.textContent = event.data;
            messages.appendChild(message);
        };
        
        form.addEventListener('submit', function(event) {
            event.preventDefault();
            
            const message = input.value;
            input.value = '';
            
            ws.send(message);
        });
    </script>
</body>
</html>
登入後複製

在上面的程式碼中,我們建立了一個websocket連線物件並連接到伺服器的位址ws://localhost:8000。然後定義了onopen、onmessage和submit事件的處理函數。在onmessage回呼函數中,我們建立一個div元素,並將接收到的訊息加入div元素中,然後將該div元素加入到頁面上的messages元素中。在submit事件的處理函數中,我們取得輸入框中的文字並傳送到伺服器。

  1. 執行程式碼

將以上的兩段程式碼分別儲存為server.php和client.html檔案。在命令列中執行以下命令:

php server.php start
登入後複製

然後在瀏覽器中開啟client.html檔案。即可存取到一個透過WebSocket實現的即時通訊系統頁面。多個客戶端連接伺服器後,可以即時發送訊息並顯示在訊息清單中。

總結:

透過以上的程式碼範例,我們從建立伺服器類別到建立客戶端頁面,實作了一個基於Workerman框架的高並發即時通訊系統。透過學習這個例子,我們對於網路程式設計中的高並發處理有了更深入的了解。同時,我們也了解到了Workerman框架的強大功能和簡單性,讓我們能夠更快速地開發功能強大的網路應用程式。希望這篇文章對於你學習網路程式設計和使用Workerman框架有所幫助。

以上是Workerman網路程式設計進階:實現高並發即時通訊系統的詳細內容。更多資訊請關注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.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前 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)

c++開源函式庫有哪些 c++開源函式庫有哪些 Apr 22, 2024 pm 05:48 PM

C++ 提供豐富的開源函式庫,涵蓋以下功能:資料結構和演算法(標準範本庫)多執行緒、正規表示式(Boost)線性代數(Eigen)圖形使用者介面(Qt)電腦視覺(OpenCV)機器學習(TensorFlow)加密(OpenSSL)資料壓縮(zlib)網路程式設計(libcurl)資料庫管理(sqlite3)

C++ 函數在網路程式設計中如何處理 DNS 查詢? C++ 函數在網路程式設計中如何處理 DNS 查詢? Apr 27, 2024 pm 06:39 PM

C++標準函式庫提供了函式來處理網路程式設計中的DNS查詢:gethostbyname():根據主機名稱尋找主機資訊。 gethostbyaddr():根據IP位址尋找主機資訊。 dns_lookup():非同步解析DNS。

Java網路程式設計有哪些常見的協定? Java網路程式設計有哪些常見的協定? Apr 15, 2024 am 11:33 AM

Java網路程式設計中常用的協定包括:TCP/IP:用於可靠資料傳輸和連線管理。 HTTP:用於Web資料傳輸。 HTTPS:HTTP的安全版本,使用加密傳輸資料。 UDP:用於快速但不穩定的資料傳輸。 JDBC:用於與關聯式資料庫互動。

Java網路程式設計如何使用UDP進行無連線通訊? Java網路程式設計如何使用UDP進行無連線通訊? Apr 15, 2024 pm 12:51 PM

UDP(用戶資料報協議)是一種輕量級的無連接網路協議,常用於時間敏感的應用程式。它允許應用程式在無需建立TCP連接的情況下發送和接收資料。範例Java程式碼可用於建立UDP伺服器和用戶端,伺服器監聽傳入資料封包並回應,客戶端傳送訊息並接收回應。此程式碼可用於建立聊天應用程式或資料收集系統等實戰案例。

C++ 函式在網路程式設計中如何實現網路安全? C++ 函式在網路程式設計中如何實現網路安全? Apr 28, 2024 am 09:06 AM

C++函數在網路程式設計中可實現網路安全,方法包括:1.使用加密演算法(openssl)加密通訊;2.使用數位簽章(cryptopp)驗證資料完整性與傳送者身分;3.防禦跨站腳本攻擊( htmlcxx)過濾和消毒使用者輸入。

Golang框架在高並發系統中的架構 Golang框架在高並發系統中的架構 Jun 03, 2024 pm 05:14 PM

對於高並發系統,Go框架提供管道模式、Goroutine池模式和訊息佇列模式等架構模式。在實戰案例中,高並發網站使用Nginx代理、Golang網關、Goroutine池和資料庫處理大量並發請求。程式碼範例展示了Goroutine池的實現,用於處理傳入請求。透過選擇合適的架構模式和實現,Go框架可以建立可擴展且高並發的高並發系統。

Java基礎入門到實戰應用:如何快速上手? Java基礎入門到實戰應用:如何快速上手? May 08, 2024 am 08:30 AM

Java入門到實戰指南:包含基礎語法入門(變數、運算子、控制流、物件、類別、方法、繼承、多型、封裝)、核心Java類別庫(異常處理、集合、泛型、輸入/輸出流、網路程式設計、日期和時間API)、實戰案例(計算器應用,包括程式碼範例)。

PHP 框架在高並發場景下的效能表現 PHP 框架在高並發場景下的效能表現 Jun 06, 2024 am 10:25 AM

在高並發情境下,根據基準測試,PHP框架的表現表現依序為:Phalcon(RPS2200)、Laravel(RPS1800)、CodeIgniter(RPS2000)、Symfony(RPS1500)。實際案例表明,Phalcon框架在電商網站雙十一活動中實現了每秒3000個訂單處理。

See all articles