搜尋
首頁後端開發php教程使用PHP實作WebSocket服務

隨著網路的發展,WebSocket技術越來越廣泛的應用。 WebSocket技術可實現雙向即時通信,適用於一些例如即時通訊、遊戲等應用場景,能夠提供更好的使用者體驗。本文將介紹使用PHP實作WebSocket服務的方法。

一、WebSocket簡介
WebSocket是HTML5提出的一個新協議,它是一種在單一TCP連接上進行全雙工通信的協議,支援即時通信,有著比HTTP更低的延遲,可進行大量資料傳輸。使用WebSocket可以實現即時通信,同時減少伺服器開銷,節省網路頻寬。

二、WebSocket實作方法

  1. 服務端

(1)建立WebSocket伺服器:

// 创建WebSocket服务器
$server = new swoole_websocket_server("0.0.0.0", 9502);

// 监听WebSocket连接事件
$server->on('open', function (swoole_websocket_server $server, $request) {
    echo "client {$request->fd} connected
";
});

// 监听WebSocket消息事件
$server->on('message', function (swoole_websocket_server $server, $frame) {
    // 处理接收到的消息
    $message = "server received message: {$frame->data}
";
    // 向WebSocket客户端发送消息
    $server->push($frame->fd, $message);
});

// 监听WebSocket关闭事件
$server->on('close', function (swoole_websocket_server $server, $fd) {
    echo "client {$fd} closed
";
});

// 启动WebSocket服务器
$server->start();

(2)服務端推播訊息:

// 向WebSocket客户端发送消息
$server->push($frame->fd, $message);
  1. 客戶端

(1)建立WebSocket連線:

// 创建WebSocket连接
var ws = new WebSocket("ws://localhost:9502");

// 监听WebSocket连接事件
ws.onopen = function() {
    console.log("WebSocket连接已打开");
};

// 监听WebSocket消息事件
ws.onmessage = function(event) {
    console.log("WebSocket收到消息:" + event.data);
};

// 监听WebSocket关闭事件
ws.onclose = function() {
    console.log("WebSocket连接已关闭");
};

(2)客戶端傳送訊息:

// 向WebSocket服务器发送消息
ws.send("hello");

三、實作過程詳解

以下我們針對上述程式碼區塊的每個部分進行詳細介紹。

  1. 服務端

(1)建立WebSocket伺服器:

// 创建WebSocket服务器
$server = new swoole_websocket_server("0.0.0.0", 9502);

這段程式碼建立了一個WebSocket伺服器,指定IP位址為0.0.0.0 ,連接埠為9502。

(2)監聽WebSocket連線事件:

// 监听WebSocket连接事件
$server->on('open', function (swoole_websocket_server $server, $request) {
    echo "client {$request->fd} connected
";
});

當有WebSocket客戶端連線時,會觸發'open'事件。這裡的$request是一個對象,包含了客戶端連線的一些訊息,例如客戶端的IP位址、連線時間等。

(3)監聽WebSocket訊息事件:

// 监听WebSocket消息事件
$server->on('message', function (swoole_websocket_server $server, $frame) {
    // 处理接收到的消息
    $message = "server received message: {$frame->data}
";
    // 向WebSocket客户端发送消息
    $server->push($frame->fd, $message);
});

當WebSocket客戶端發送訊息時,會觸發'message'事件。這裡的$frame是一個對象,包含了接收到訊息的一些訊息,例如訊息的內容、發送時間等。

(4)監聽WebSocket關閉事件:

// 监听WebSocket关闭事件
$server->on('close', function (swoole_websocket_server $server, $fd) {
    echo "client {$fd} closed
";
});

當WebSocket客戶端關閉連線時,會觸發'close'事件。這裡的$fd是客戶端連線的唯一識別碼。

(5)啟動WebSocket伺服器:

// 启动WebSocket服务器
$server->start();

使用start()方法啟動WebSocket伺服器,使其開始監聽客戶端的連線和訊息。

(6)服務端推播訊息:

// 向WebSocket客户端发送消息
$server->push($frame->fd, $message);

使用push()方法傳送訊息給指定客戶端。 $frame->fd是客戶端連線的唯一標識符,$message是要傳送的訊息內容。

  1. 客戶端

(1)建立WebSocket連接:

// 创建WebSocket连接
var ws = new WebSocket("ws://localhost:9502");

這段程式碼建立了一個WebSocket連接,指定URL為ws:// localhost:9502。其中,ws表示協定類型,localhost表示WebSocket伺服器的IP位址,9502表示監聽的連接埠號碼。

(2)監聽WebSocket連線事件:

// 监听WebSocket连接事件
ws.onopen = function() {
    console.log("WebSocket连接已打开");
};

當WebSocket連線成功時,會觸發'open'事件。在這裡我們使用console.log()方法輸出一則訊息。

(3)監聽WebSocket訊息事件:

// 监听WebSocket消息事件
ws.onmessage = function(event) {
    console.log("WebSocket收到消息:" + event.data);
};

當WebSocket客戶端收到訊息時,會觸發'message'事件。在這裡我們使用console.log()方法輸出一則訊息。

(4)監聽WebSocket關閉事件:

// 监听WebSocket关闭事件
ws.onclose = function() {
    console.log("WebSocket连接已关闭");
};

當WebSocket連線關閉時,會觸發'close'事件。在這裡我們使用console.log()方法輸出一則訊息。

(5)客戶端傳送訊息:

// 向WebSocket服务器发送消息
ws.send("hello");

使用send()方法傳送訊息至WebSocket伺服器。這裡我們發送了一條字串"hello"。

四、總結

本文介紹了使用PHP實作WebSocket服務的方法。 WebSocket技術在即時通訊、遊戲等領域有著廣泛應用,有著比HTTP更低的延遲,能夠提供更好的使用者體驗。使用PHP實現WebSocket服務可以方便快速地實現即時通信,並減少伺服器開銷,節省網路頻寬。

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

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
如何解决Windows中的“服务没有响应”错误。如何解决Windows中的“服务没有响应”错误。Apr 27, 2023 am 08:16 AM

NETSTART命令是Windows中的内置命令,可用于启动和停止服务和其他程序。有时,在运行此命令时,您可能会遇到NetHelpmsg2186错误。遇到此错误的大多数用户都试图通过运行NETSTARTWUAUSERV命令来重新启动Windows更新服务。如果Windows更新服务已禁用或未运行,则您的系统可能会面临风险,因为您无法获取最新更新。让我们详细探讨为什么会发生此错误以及如何绕过它。好吗?什么是错误2186?Windows更新服务通过安装最新的关键更新和安全功

win10安全中心服务被禁用解决方案win10安全中心服务被禁用解决方案Jul 16, 2023 pm 01:17 PM

安全中心服务是win10系统内置的电脑防护作用,能够实时保护电脑安全,可是有些客户在开机的时候碰见了安全中心服务被禁用的状况,怎么办呢?很简单,你可以打开服务面板,找到SecurityCenter项,以后右键打开它的属性窗口,将启动种类设定为自动,以后再点击一下启动就能够再次开启这个服务了。win10安全中心服务被禁用怎么办:1、按“Win+R”开启“运作”窗口。2、随后输入“services.msc”指令后按回车3、随后在右边窗口中找到“SecurityCenter”一项,双击此项开启其属性窗

远程桌面连接服务用命令打开方法远程桌面连接服务用命令打开方法Dec 31, 2023 am 10:38 AM

远程桌面连接给很多用户的日常生活带来了方便,也有部分想使用命令来进行远程连接,操作起来更方便,那么该怎么连接呢?远程桌面连接服务用命令打开方法可以帮你解决。远程桌面连接命令怎么设置:方法一、通过运行命令远程连接1、按下“Win+R”打开“运行”输入mstsc2、然后点击“显示选项”3、输入ip地址点击“连接”。4、显示正在连接即可。方法二、通过命令提示符远程连接1、按下“Win+R”打开“运行”输入cmd2、在“命令提示符”输入mstsc/v:192.168.1.250/console

Linux 重启服务的正确方式是什么?Linux 重启服务的正确方式是什么?Mar 15, 2024 am 09:09 AM

Linux重启服务的正确方式是什么?在使用Linux系统时,经常会遇到需要重启某个服务的情况,但是有时候我们可能会在重启服务时遇到一些问题,比如服务没有真正停止或启动等情况。因此,掌握正确的重启服务的方式是非常重要的。在Linux中,通常可以使用systemctl命令来管理系统服务。systemctl命令是systemd系统管理器的一部分

启用win7音频服务的方法启用win7音频服务的方法Jul 10, 2023 pm 05:13 PM

计算机有许多系统服务来支持各种程序的应用。如果电脑没有声音,在排除硬件问题的情况下,大部分音频服务都没有打开,那么win7如何启用音频服务呢?许多朋友比较模糊,所以针对如何启用win7音频服务的问题,下面小编介绍win7音频服务的启用方法。启用win7音频服务的方法。1.在Windows7系统下的计算机桌面上找到计算机,右键选择管理选项。2.在打开的计算机管理界面中找到并打开服务和应用下的服务项目。在右边的服务界面上找到WindowsAudio双击打开修改。4.切换到常规项目,点击启动开启功能。

验证码拦不住机器人了!谷歌AI已能精准识别模糊文字,GPT-4则装瞎求人帮忙验证码拦不住机器人了!谷歌AI已能精准识别模糊文字,GPT-4则装瞎求人帮忙Apr 12, 2023 am 09:46 AM

“最烦登网站时各种奇奇怪怪(甚至变态)的验证码了。”现在,有一个好消息和一个坏消息。好消息就是:AI可以帮你代劳这件事了。不信你瞧,以下是三张识别难度依次递增的真实案例:而这些是一个名为“Pix2Struct”的模型给出的答案:全部准确无误、一字不差有没有?有网友感叹:确定,准确性比我强。所以可不可以做成浏览器插件??不错,有人表示:别看这几个案例相比还算简单,但凡微调一下,我都不敢想象其效果有多厉害了。所以,坏消息就是——验证码马上就要拦不住机器人了!(危险危险危险……)如何做到?Pix2St

Ubuntu PHP服务无法正常启动的解决办法Ubuntu PHP服务无法正常启动的解决办法Feb 28, 2024 am 10:48 AM

标题:解决Ubuntu下PHP服务无法正常启动的方法及具体代码示例在使用Ubuntu搭建网站或应用程序时,经常会遇到PHP服务无法正常启动的问题,这会导致网站无法正常访问或应用程序无法正常运行。本文将介绍如何解决Ubuntu下PHP服务无法正常启动的问题,同时提供具体的代码示例帮助读者快速解决此类故障。一、检查PHP配置文件首先,我们需要检查PHP的配置文件

如何在 Linux 中执行服务重启命令?如何在 Linux 中执行服务重启命令?Mar 14, 2024 am 11:06 AM

在Linux中,要执行服务重启命令通常需要使用Systemd服务管理器。Systemd是Linux上广泛使用的服务管理工具,可以方便地管理和控制系统服务。下面将介绍如何在Linux中通过Systemd执行服务重启命令,并提供具体的代码示例。步骤一:确认服务名称在执行服务重启命令之前,首先需要确认要重启的服务名称。可以通过以下命令查看系统中正在运行的服务列表:

See all articles

熱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冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

SublimeText3 Mac版

SublimeText3 Mac版

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

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具