翼度科技»论坛 编程开发 PHP 查看内容

PHP转Go系列 | ThinkPHP与Gin框架之打造基于WebSocket技术的消息推送中心

3

主题

3

帖子

9

积分

新手上路

Rank: 1

积分
9
大家好,我是码农先森。
在早些年前客户端想要实时获取到最新消息,都是使用定时长轮询的方式,不断的从服务器上获取数据,这种粗暴的骚操作实属不雅。不过现如今我也还见有人还在一些场景下使用,比如在 PC 端扫描二维码,然后使用长轮询的方式从服务端获取最新的扫码信息,来判断用户是否已经扫码完成,诸如这种场景还有不少。其实大家都知道长轮询的方式不好,那为什么还有人使用呢?

我想最直接的原因就是「开发起来简单明了」,人性决定了人类都是趋易避难的高级物种,那个容易上手就用那个。但是我想表达的是除了长轮询的方式外,WebSocket 技术其实也不难,只不过对于从来没有接触过长连接的人来说,刚开始上手时会有一些思维上的障碍。这次我分享的内容是基于 WebSocket 技术的消息推送中心,看起来很高大上,其实也就是通过一些小的例子来演示,从服务端推送数据到客户端的这个过程,接下来的例子简单明了容易上手,我们赶紧开始吧。
话不多说,开整!我们先来看一下整体的项目目录结构,内容主要分为 PHP 和 Go 两部分。
  1. [manongsen@root php_to_go]$ tree -L 2
  2. .
  3. ├── go_websocket
  4. │   ├── app
  5. │   │   ├── controller
  6. │   │   |        |── message.go
  7. │   │   │   └── websocket.go
  8. │   │   └── route.go
  9. │   ├── go.mod
  10. │   ├── go.sum
  11. │   └── main.go
  12. └── php_websocket
  13. │   ├── app
  14. │   │   ├── controller
  15. │   │   |        |── Push.php
  16. │   │   │   └── Worker.php
  17. │   ├── composer.json
  18. │   ├── composer.lock
  19. │   ├── config
  20. │   │   |── worker_server.php
  21. │   │   └── worker.php
  22. │   ├── route
  23. │   │   └── app.php
  24. │   ├── think
  25. │   ├── vendor
  26. │   └── .env
复制代码
ThinkPHP

使用 composer 创建基于 ThinkPHP 框架的 php_websocket 项目。
  1. ## 当前目录
  2. [manongsen@root ~]$ pwd
  3. /home/manongsen/workspace/php_to_go/php_websocket
  4. ## 安装 ThinkPHP 框架
  5. [manongsen@root php_websocket]$ composer create-project topthink/think php_websocket
  6. [manongsen@root php_websocket]$ cp .example.env .env
  7. ## 安装 Composer 依赖包
  8. [manongsen@root php_websocket]$ composer require topthink/think-worker
  9. [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

举报 回复 使用道具