thinkphp结合WebSocket 实时推送消息详细实例

这篇具有很好参考价值的文章主要介绍了thinkphp结合WebSocket 实时推送消息详细实例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实时推送消息是现代 Web 应用程序中常见的一种需求,而 WebSocket 已成为实时通信的首选技术。ThinkPHP 提供了对 WebSocket 的支持,本文将演示如何使用 ThinkPHP 实现 WebSocket 实时推送消息的详细例子。

  1. 安装 Swoole

在开始之前,你需要先安装 Swoole 扩展。可以使用以下命令来安装:

pecl install swoole

如果没有安装 pecl 工具,可以使用下面的命令:

yum install php-pear -y

然后再次运行 pecl 安装命令。

  1. 初始化 ThinkPHP 项目

使用 Composer 创建一个空的 PHP 项目:

composer create-project topthink/think tp-websocket

进入项目的根目录:

cd tp-websocket
  1. 创建 WebSocket 控制器

在 ThinkPHP 中创建 WebSocket 控制器与创建 HTTP 控制器类似,只需要继承 \think\swoole\WebSocket 类即可。在控制器中,可以定义事件处理程序并处理客户端发送的消息。以下是一个简单的 WebSocket 控制器示例:

<?php
namespace app\index\controller;

use think\swoole\WebSocket;
use Swoole\Http\Request;
use Swoole\WebSocket\Frame;

class Chat extends WebSocket
{
    /**
     * WebSocket 建立连接时对应的事件处理函数
     * @param Request $request
     */
    public function onOpen(Request $request)
    {
        echo "new client connected\n";
    }
 
    /**
     * WebSocket 接受消息时对应的事件处理函数
     * @param Frame $frame
     */
    public function onMessage(Frame $frame)
    {
        var_dump($frame->data);
    }
 
    /**
     * WebSocket 断开连接时对应的事件处理函数
     * @param Request $request
     */
    public function onClose($fd)
    {
        echo "client {$fd} closed\n";
    }
}

在此示例中,我们定义了三个事件处理程序:

  • onOpen(): 当 WebSocket 连接被建立成功时,会触发该事件,我们可以在该事件处理程序中实现一些初始化操作,例如记录日志、发送欢迎消息等。
  • onMessage(): 当客户端发送消息时,会触发该事件,我们可以在该事件处理程序中处理客户端发送的消息。
  • onClose(): 当 WebSocket 连接被关闭时,会触发该事件,我们可以在该事件处理程序中释放资源、记录日志等。
  1. 配置 WebSocket 服务器

在 ThinkPHP 中,WebSocket 服务器的配置与 HTTP 服务器的配置类似,在应用程序的 config 目录下创建一个 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 服务器的监听地址。
  • port: WebSocket 服务器的监听端口。
  • worker_num: 指定 worker 进程数量。
  • daemonize: 是否以守护进程的方式运行。
  • pid_file: 后台进程的 PID 文件路径。
  • log_file: 日志文件路径。
  • websocket.enable: 是否启用 WebSocket 服务。
  • websocket.handler: WebSocket 请求处理器的类名。
  1. 启动 WebSocket 服务器

我们需要在控制台中启动 WebSocket 服务器,可以使用以下命令:

php think swoole start

启动成功后,WebSocket 服务器将在指定的地址和端口上监听客户端的连接。

  1. 测试 WebSocket 服务

现在,我们可以使用任何支持 WebSocket 的客户端来测试我们的 WebSocket 服务器。可以使用浏览器的开发者工具或者 Postman 等工具来发送 WebSocket 消息。

假设我们的 WebSocket 服务器监听在 9502 端口,我们可以使用以下 JavaScript 代码在浏览器中连接 WebSocket 服务器并发送消息:

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');
}

在浏览器的控制台中,你将看到类似以下的输出:

WebSocket opened
Received message: Hello, WebSocket!

到此,我们已经成功实现了一个简单的 WebSocket 实时推送消息的例子。你可以根据自己的需求扩展 WebSocket 控制器,并在该控制器中处理 WebSocket 事件。文章来源地址https://www.toymoban.com/news/detail-841842.html

到了这里,关于thinkphp结合WebSocket 实时推送消息详细实例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot集成WebSocket实现消息实时推送(提供Gitee源码)

    前言:在最近的工作当中,客户反应需要实时接收消息提醒,这个功能虽然不大,但不过也用到了一些新的技术,于是我这边写一个关于我如何实现这个功能、编写、测试到部署服务器,归纳到这篇博客中进行总结。 目录 一、什么是WebSocket 二、后端实现 2.1、引入pom.xml依赖

    2024年02月11日
    浏览(33)
  • Spring Boot进阶(48):【实战教程】SpringBoot集成WebSocket轻松实现实时消息推送

            WebSocket是一种新型的通信协议,它可以在客户端与服务器端之间实现双向通信,具有低延迟、高效性等特点,适用于实时通信场景。在SpringBoot应用中,集成WebSocket可以方便地实现实时通信功能,如即时聊天、实时数据传输等。         本文将介绍如何在Sprin

    2024年02月09日
    浏览(37)
  • 如果让你实现实时消息推送你会用什么技术?轮询、websocket还是sse

    在日常的开发中,我们经常能碰见服务端需要主动推送给客户端数据的业务场景,比如_数据大屏的实时数据_,比如_消息中心的未读消息_,比如_聊天功能_等等。 本文主要介绍SSE的使用场景和如何使用SSE。 学习就完事了 我们常规实现这些需求的方案有以下三种 轮询 websock

    2024年03月19日
    浏览(32)
  • uniapp小程序订阅消息推送+Thinkphp5后端代码教程示例

    记录一下通过uniapp开发小程序消息推送的实例,配合后端tp推送,之前写的项目是微信小程序而且后端是原生php,这次通过项目记录一下 首先我们通过原生php代码回顾一下,不考虑模板参数的话,主要就是“ touser ”和“ ACCESS_TOKEN ” 上述代码大概就是基本流程,我们再看一

    2024年02月08日
    浏览(32)
  • WebSocket与消息推送

    B/S结构的软件项目中有时客户端需要实时的获得服务器消息,但默认HTTP协议只支持请求响应模式,这样做可以简化Web服务器,减少服务器的负担,加快响应速度,因为服务器不需要与客户端长时间建立一个通信链接,但不容易直接完成实时的消息推送功能,如聊天室、后台信

    2024年02月13日
    浏览(25)
  • WebSocket实现前后端消息推送

    WebSocket的代码编写会根据业务逻辑而进行变化,需要去理解编写思路,这样才能在工作中使用得游刃有余。 1. 引入依赖 2.  编写WebSocketConfig配置类 3. 编写WebSocket服务类 下面的服务类中,可以编写多个sendMeg方法(写法比较多样化),作用是发送消息回前端,使用方式就是你在自

    2024年02月11日
    浏览(25)
  • thinkphp websocket 开发实时聊天系统的用户群组与订阅功能实现 (一)

    PHP开发实时聊天系统的用户群组与订阅功能实现 在当今社交互联网时代,实时聊天系统已经成为人们日常交流的重要工具。为了提供更好的用户体验,我们需要实现用户群组与订阅功能,使得用户能够方便地创建和加入群组,并且能够订阅感兴趣的内容。 本篇文章将介绍如

    2024年02月07日
    浏览(32)
  • websocket实时推送统计数据给前端页面

    前提须知:websocket基本使用 业务场景,每秒推送统计数据给前端页面,分别显示前天,昨天,今天的前十名客户数据 @ServerEndpoint(\\\"/smsMCustomerStaTop10Ws\\\") 定义推送数据给到具体的连接标识 以上 onOpen() 方法最终触发的业务方法 smsMonitorService.pushSmsMCustomerStaTop10(); 以上 smsMonitorMapper.findSm

    2024年02月15日
    浏览(28)
  • Vue-全局websocket 实现消息推送

     在上一篇文章  WebSocket 消息推送 https://blog.csdn.net/qq_63312957/article/details/125375122?spm=1001.2014.3001.5502  中已经简单描述了如何使用 springboot  vue websocket 实现数据推送,建议先阅读之前的文章之后,再来阅读本篇文章。 新建global.js文件 一:main.js 文件中增加  二:app.vue中添加

    2024年02月16日
    浏览(26)
  • WebSocket+Redis实现消息推送机制以及离线消息推送(vue+sping boot)

    vue端涉及业务就不贴了 WebSocket 是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。 WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在

    2024年02月09日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包