實時推送消息是現(xiàn)代 Web 應用程序中常見的一種需求,而 WebSocket 已成為實時通信的首選技術(shù)。ThinkPHP 提供了對 WebSocket 的支持,本文將演示如何使用 ThinkPHP 實現(xiàn) WebSocket 實時推送消息的詳細例子。
- 安裝 Swoole
在開始之前,你需要先安裝 Swoole 擴展??梢允褂靡韵旅顏戆惭b:
pecl install swoole
如果沒有安裝 pecl 工具,可以使用下面的命令:
yum install php-pear -y
然后再次運行 pecl 安裝命令。
- 初始化 ThinkPHP 項目
使用 Composer 創(chuàng)建一個空的 PHP 項目:
composer create-project topthink/think tp-websocket
進入項目的根目錄:
cd tp-websocket
- 創(chuàng)建 WebSocket 控制器
在 ThinkPHP 中創(chuàng)建 WebSocket 控制器與創(chuàng)建 HTTP 控制器類似,只需要繼承 \think\swoole\WebSocket 類即可。在控制器中,可以定義事件處理程序并處理客戶端發(fā)送的消息。以下是一個簡單的 WebSocket 控制器示例:
<?php
namespace app\index\controller;
use think\swoole\WebSocket;
use Swoole\Http\Request;
use Swoole\WebSocket\Frame;
class Chat extends WebSocket
{
/**
* WebSocket 建立連接時對應的事件處理函數(shù)
* @param Request $request
*/
public function onOpen(Request $request)
{
echo "new client connected\n";
}
/**
* WebSocket 接受消息時對應的事件處理函數(shù)
* @param Frame $frame
*/
public function onMessage(Frame $frame)
{
var_dump($frame->data);
}
/**
* WebSocket 斷開連接時對應的事件處理函數(shù)
* @param Request $request
*/
public function onClose($fd)
{
echo "client {$fd} closed\n";
}
}
在此示例中,我們定義了三個事件處理程序:
- onOpen(): 當 WebSocket 連接被建立成功時,會觸發(fā)該事件,我們可以在該事件處理程序中實現(xiàn)一些初始化操作,例如記錄日志、發(fā)送歡迎消息等。
- onMessage(): 當客戶端發(fā)送消息時,會觸發(fā)該事件,我們可以在該事件處理程序中處理客戶端發(fā)送的消息。
- onClose(): 當 WebSocket 連接被關(guān)閉時,會觸發(fā)該事件,我們可以在該事件處理程序中釋放資源、記錄日志等。
- 配置 WebSocket 服務器
在 ThinkPHP 中,WebSocket 服務器的配置與 HTTP 服務器的配置類似,在應用程序的 config 目錄下創(chuàng)建一個 websocket.php 文件,并添加以下配置:
<?php
return [
'server' => [
'host' => '0.0.0.0',
'port' => 9502,
'worker_num' => 2,
'daemonize' => false,
'pid_file' => runtime_path() . 'swoole.pid',
'log_file' => runtime_path() . 'swoole.log',
],
'websocket' => [
'enable' => true,
'handler' => app\index\controller\Chat::class,
],
];
在此示例中,我們定義了以下配置項:
- host: WebSocket 服務器的監(jiān)聽地址。
- port: WebSocket 服務器的監(jiān)聽端口。
- worker_num: 指定 worker 進程數(shù)量。
- daemonize: 是否以守護進程的方式運行。
- pid_file: 后臺進程的 PID 文件路徑。
- log_file: 日志文件路徑。
- websocket.enable: 是否啟用 WebSocket 服務。
- websocket.handler: WebSocket 請求處理器的類名。
- 啟動 WebSocket 服務器
我們需要在控制臺中啟動 WebSocket 服務器,可以使用以下命令:
php think swoole start
啟動成功后,WebSocket 服務器將在指定的地址和端口上監(jiān)聽客戶端的連接。
- 測試 WebSocket 服務
現(xiàn)在,我們可以使用任何支持 WebSocket 的客戶端來測試我們的 WebSocket 服務器。可以使用瀏覽器的開發(fā)者工具或者 Postman 等工具來發(fā)送 WebSocket 消息。
假設(shè)我們的 WebSocket 服務器監(jiān)聽在 9502 端口,我們可以使用以下 JavaScript 代碼在瀏覽器中連接 WebSocket 服務器并發(fā)送消息:
var ws = new WebSocket('ws://localhost:9502');
ws.onopen = function() {
console.log('WebSocket opened');
ws.send('Hello, WebSocket!');
}
ws.onmessage = function(event) {
console.log(`Received message: ${event.data}`);
}
ws.onclose = function() {
console.log('WebSocket closed');
}
在瀏覽器的控制臺中,你將看到類似以下的輸出:文章來源:http://www.zghlxwxcb.cn/news/detail-841842.html
WebSocket opened
Received message: Hello, WebSocket!
到此,我們已經(jīng)成功實現(xiàn)了一個簡單的 WebSocket 實時推送消息的例子。你可以根據(jù)自己的需求擴展 WebSocket 控制器,并在該控制器中處理 WebSocket 事件。文章來源地址http://www.zghlxwxcb.cn/news/detail-841842.html
到了這里,關(guān)于thinkphp結(jié)合WebSocket 實時推送消息詳細實例的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!