thinkphp结合WebSocket 实时推送消息详细实例
以下是一个使用ThinkPHP结合WebSocket进行实时推送消息的示例代码。
首先,确保你已经安装了workerman
和websocket
扩展。
- 创建一个Workerman服务。在你的ThinkPHP项目中创建一个新的文件,例如
application/workerman/Events.php
:
<?php
use Workerman\Worker;
use Workerman\Lib\Timer;
// 注意:这里的地址和端口要与WebSocket服务器配置一致
$worker = new Worker('websocket://0.0.0.0:2346');
$worker->onConnect = function($connection) {
// 当客户端连接时,可以在这里进行一些处理
};
$worker->onMessage = function($connection, $data) {
// 当服务器接收到客户端发来的消息时,可以在这里进行一些处理
// 这里可以实现与客户端的数据交互
};
$worker->onClose = function($connection) {
// 当客户端关闭连接时,可以在这里进行一些处理
};
// 运行Worker服务
Worker::runAll();
- 在
application/command.php
文件中定义命令,启动Workerman服务:
<?php
use think\console\Command;
use think\console\Input;
use think\console\Output;
use Workerman\Worker;
class WorkermanCommand extends Command
{
protected function configure()
{
// 命令的定义
$this->setName('workerman')->setDescription('Workerman command');
}
protected function execute(Input $input, Output $output)
{
$this->startWorkerman();
}
private function startWorkerman()
{
global $argv;
$argv[0] = 'workerman';
$argv[1] = 'start';
// 这里指定运行的worker文件
$argv[2] = 'Events';
require_once __DIR__ . '/../workerman/Events.php';
Worker::runAll();
}
}
- 在终端运行Workerman服务:
php think workerman
- 在前端页面,你可以使用WebSocket客户端连接到上面启动的服务器,并发送接收消息。
// JavaScript WebSocket客户端示例
var socket = new WebSocket('ws://your_server_ip:2346');
socket.onopen = function(event) {
// 连接打开时的处理
};
socket.onmessage = function(event) {
// 当接收到服务器发送的消息时的处理
console.log(event.data);
};
socket.onerror = function(event) {
// 出现错误时的处理
};
socket.onclose = function(event) {
// 连接关闭时的处理
};
// 发送消息到服务器
socket.send('Hello, Server!');
确保替换your_server_ip
为你的服务器IP或域名,端口2346
要与Workerman服务器配置的端口一
评论已关闭