PHP转Go系列 | ThinkPHP与Gin框架之打造基于WebSocket技术的消息推送中心
|
大家好,我是码农先森。
在早些年前客户端想要实时获取到最新消息,都是使用定时长轮询的方式,不断的从服务器上获取数据,这种粗暴的骚操作实属不雅。不过现如今我也还见有人还在一些场景下使用,比如在 PC 端扫描二维码,然后使用长轮询的方式从服务端获取最新的扫码信息,来判断用户是否已经扫码完成,诸如这种场景还有不少。其实大家都知道长轮询的方式不好,那为什么还有人使用呢?
我想最直接的原因就是「开发起来简单明了」,人性决定了人类都是趋易避难的高级物种,那个容易上手就用那个。但是我想表达的是除了长轮询的方式外,WebSocket 技术其实也不难,只不过对于从来没有接触过长连接的人来说,刚开始上手时会有一些思维上的障碍。这次我分享的内容是基于 WebSocket 技术的消息推送中心,看起来很高大上,其实也就是通过一些小的例子来演示,从服务端推送数据到客户端的这个过程,接下来的例子简单明了容易上手,我们赶紧开始吧。
话不多说,开整!我们先来看一下整体的项目目录结构,内容主要分为 PHP 和 Go 两部分。- [manongsen@root php_to_go]$ tree -L 2
- .
- ├── go_websocket
- │ ├── app
- │ │ ├── controller
- │ │ | |── message.go
- │ │ │ └── websocket.go
- │ │ └── route.go
- │ ├── go.mod
- │ ├── go.sum
- │ └── main.go
- └── php_websocket
- │ ├── app
- │ │ ├── controller
- │ │ | |── Push.php
- │ │ │ └── Worker.php
- │ ├── composer.json
- │ ├── composer.lock
- │ ├── config
- │ │ |── worker_server.php
- │ │ └── worker.php
- │ ├── route
- │ │ └── app.php
- │ ├── think
- │ ├── vendor
- │ └── .env
复制代码 ThinkPHP
使用 composer 创建基于 ThinkPHP 框架的 php_websocket 项目。- ## 当前目录
- [manongsen@root ~]$ pwd
- /home/manongsen/workspace/php_to_go/php_websocket
- ## 安装 ThinkPHP 框架
- [manongsen@root php_websocket]$ composer create-project topthink/think php_websocket
- [manongsen@root php_websocket]$ cp .example.env .env
- ## 安装 Composer 依赖包
- [manongsen@root php_websocket]$ composer require topthink/think-worker
- [manongsen@root php_websocket]$ composer require predis/predis
复制代码 使用 php think make:controller Worker 命令创建 Worker.php 控制器。这个控制器中主要实现了 onWorkerStart 这个方法,首先添加了一个 Timer 异步定时器,然后从 Redis 队列中读取消息,最后将消息推送到客户端,这个定时器会每间隔一秒钟调度一次。
[code]// ./php_to_go/php_websocket/app/controller/Worker.php |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|
|
|
发表于 2024-8-15 16:12:47
举报
回复
分享
|
|
|
|