当前位置:   LINUX > 正文

分享laravelechoserver广播服务搭建

laravel,laravel教程,redis,websocket,git,容器,json,php,nginx,https,服务器,restful,swoole,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具,前端开发工具,开发人员工具,站长工具

下面由Laravel教程栏目给大家介绍laravel-echo-server广播服务搭建,希望对需要的朋友有所帮助!

动机

当前项目中很多场景采用 Redis 队列和定时任务来处理执行时间较长的任务,这些任务执行的状态和执行结果只能通过前端重新发送请求获取。

目标

为了优化程序体验,让用户尽可能早的关注到任务执行结果,我们评估了各种方案。为了降低前后端的沟通成本避免重复造轮子,我们决定采用 Laravel 框架内置的广播功能。

选择服务

官方推荐采用 pusher 来搭建应用,pusher 的好处是搭建起来非常简单。但考虑到是国外的服务,存在访问稳定性风险;且目前项目规模较小,于是尝试自己搭建 Websocket 服务,使用的就是 Laravel 框架官方提到的 tlaverdure/laravel-echo-server 项目。

laravel-echo-server 服务特点

这个项目的使用方法可以直接去他们的 github 页面 获得,我们看中的几点如下:

  1. 可通过 Redis 的发布订阅功能来获取事件信息并广播出去,这点的效率要高于向 pusher 的 HTTP API 发送推送请求;
  2. 同时兼容 pusher 的 HTTP API ,如果一些服务无法通过 Redis 发布事件,则可以采用这种模式推送事件;

搭建 Websocket 服务

我们一开始使用了 oanhnn/laravel-echo-server 这个镜像来启动容器,在调试过程中发现这个服务并不稳定,Node 的服务会在异常时直接退出,这是我们碰到的第一个坑。为了快速解决这个问题,我们再这个镜像基础上加入了 supervisor 来负责进行服务进程的退出后重启的任务,并做成了我们自己的镜像。

Redis 订阅

在试用 Redis 订阅时,除了常规的数据库地址和密码等参数以外,key 前缀是我们碰到的又一个坑,对应在 laravel-echo-server 服务中的 laravel-echo-server.json 文件中的 keyPrefix 配置项,一开始没有找到正确的方法,无论怎么配置都不对。后来发现如果想知道要广播事件的程序当前的 Redis key 前缀是什么,就在 tinker 中执行以下脚本即可。

# php artisan tinkerconfig('database.redis.options.prefix');

Nginx 代理

由于生产环境采用了 HTTPS 协议,所以需要给服务增加证书,但因为我是 Node 小白,没有 Node 程序使用证书的配置经验,所以一轮尝试之后基本上放弃了,之后采用了 Nginx 代理的方式使用证书,经过几轮尝试,终于配置成功。

server {
    listen port;
    server_name your-domain;
    ssl on;
    ssl_certificate     path-to-pem;
    ssl_certificate_key path-to-key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;

    location /socket.io {
        proxy_pass http://container-name:6002;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
    }}

私有/出席频道授权

Laravel 广播将频道分为:公共、私有和出席(我可能翻译的不对,请指正),其中后两者是需要授权访问。我们需要用到的是私有频道,只有经过授权的人才能从前端订阅我们的事件。这也是我们遇到的一个坑。

经我们观察和源码阅读,发现 laravel-echo 的整体授权过程是:

  1. 前端程序先向 laravel-echo-server 服务发送一个 HTTP POST 请求;
  2. laravel-echo-server 根据配置中 authEndpointauthHost 这两项,向应用服务器发送一个 HTTP POST,POST 数据是 channel 名字,同时透传 header 中的 Authorization 数据;
  3. laravel-echo-server 会根据应用服务器的响应来判断授权结果,如果应用服务器响应的是非 HTTP 200 状态,就说明发生了错误,授权失败。

我们在实践中遇到两个问题。第一个问题是,我们项目的授权守门逻辑并非 laravel 默认的,所以默认的 Broadcast::routes() 所引入的路由无法直接使用。发现问题后,我们重新加入了我们自己的授权路由,并配置到 laravel-echo-server.json 的 authEndpoint 配置项中。

另一个问题是,我们没有采用标准的 RESTFul 协议规则:响应对应的 HTTP Code 来描述错误状态。致使 laravel-echo-server 即便在授权失败的时候也不能发现问题并反馈给前端程序,情况类似下图:

迟早还是要还债的…

总结

这个功能开发的,没有当初想的那么顺利,主要的问题有以下几点:

  1. laravel-echo-server 没有预想的那么健壮,以后有时间还得找找替代方案,貌似也有用 swoole 做的项目,可以尝试一下;
  2. 预先忘记考虑到 SSL 的问题,导致发布时临时处理得手忙脚乱;
  3. laravel-echo-server 和 laravel-echo 本身都是很小的项目,遇到问题应该优先考虑去分析其代码减少尝试的时间。

以上就是分享laravel-echo-server广播服务搭建的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/LINUX/detail/17314
推荐阅读
  • swoole是框架。swoole有两个部分。一个是PHP扩展,用C开发的,这是核心。另一个是框架,像yii、TP、Laravel一样,是PHP代码写的。swoole框架像PHP框架一样,适用于web开发。swoole,php,服务器,apa... [详细]

  • 这篇文章主要介绍了Swoole4.4协程抢占式调度器详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧Swoole,协程抢占式调度器,swoole,php,注入,rpc,go,DevBox,在线流程图,编程,编... [详细]

  • php如何实现长链接php,websocket,swoole,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具,前端开发工具,开发人员工具,站长工具php如何实现... [详细]

  • ThinkPHP比较简单,因为ThinkPHP纯国产,比较接地气,而且文档非常全面,国内用户群体庞大,解决问题的途径更多,社区比较活跃,对于国内的新手是非常友好的,当然缺点就是臃肿,性能表现不佳。php,thinkphp,容器,swoole... [详细]

  • PHP开发工程师怎样才算高级的开发工程师有什么学习路径么?或者学习路线,要回那些东西php,go,swoole,hive,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线... [详细]

  • RTphp想找合适的连接池,pdo支持吗php,pdo,服务器,mysql,swoole,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具,前端开发工具,开发人员... [详细]

  • www.laifeng.com大家看这个来疯聊天网,直接在网页就能发消息即时聊天!!是即时!!这个网站是什么语言写的,是PHP吗?还有很多WEBqq也是在web上即时聊天,如果用PHP+前端技术的化能不能实现出一个跟QQphp,node.j... [详细]

  • swoole默认有4个进程。Master进程:主进程、Manger进程:管理进程、Worker进程:工作进程、Task进程:异步任务工作进程。swoole,安全,服务器,php,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,... [详细]

  • 有了swoole这样强大的扩展之后,越来越多的框架都是基于swoole被开发出来,Swoft就是其中一款不错的PHP框架,本文将与大家详细讨论微服务协程框架Swoft的使用方法。PHP应用,https,php,redis,swoole,gi... [详细]

  • swoole是框架。swoole有两个部分。一个是PHP扩展,用C开发的,这是核心。另一个是框架,像yii、TP、Laravel一样,是PHP代码写的。swoole,php,服务器,apache,程序员,https,json,udp,Dev... [详细]

  • 如何解决《什么是Linux内核上下文中的DMA映射和DMA引擎?》经验,为你挑选了1个好方法。linux,linux-device-driver,linux-kernel,dma,pci-e,DevBox,在线流程图,编程,编程问答,程序员... [详细]

  • MAC本来就自带了php,但是很多扩展没有安装,所以选择了重新安装php并升级到最新版,下面说说安装步骤,希望对大家有所帮助mac,brew,php,git,ruby,https,go,apache,mysql,sql,mariadb,ba... [详细]

  • 过去半年使用PHP和Java两种技术栈完成了一个游戏服务器项目。由于项目中有高频的网络请求,所以PHP技术栈尝试使用Swoole引擎(基于事件的高性能异步并行网络通信引擎)来完成部分游戏业务。安装swoole很简单,由于是国人做的项目,很多... [详细]

  • 本篇文章教大家如何基于Hyperf+WebSocket+RabbitMQ实现的一个简单大屏幕的消息推送,希望对大家有所帮助。php,Hyperf,RabbitMQ,WebSocket,websocket,服务器,swoole,https,g... [详细]

  • 如何解决《AndroidPC上的Android工作室更快吗?》经验,为你挑选了0个好方法。linux,performance,android,android-studio,windows,DevBox,在线流程图,编程,编程问答,程序员,开... [详细]

  • 这篇文章主要介绍了使用php+swoole对client数据实时更新(一)的相关资料,需要的朋友可以参考下swoole_client,php实时更新,ajax,websocket,服务器,html,swoole,php,https,DevB... [详细]

  • 如何解决《准备加载内核》经验,为你挑选了0个好方法。linux,boot,assembly,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具,前端开发工具,开发人... [详细]

  • yield,wool:为什么写PHP的对yield协程和swoole这种异步框架不感冒?:data->PHPPHPPHPPHPgolanggonode.jsJavaPHPyield,wool,php,go,node.js,swoole... [详细]

  • 回复内容:不成熟的程序员是见异思迁的,只考虑技术问题。市场是理性的,考虑语言的生态,部署难易,解决方案成熟度,招聘成本等因素。功能上很多语言都可以替代PHP,但PHP还不是“必需”被哪一种语言取代。我想我回答你的问题了。我写了两年多的PHP... [详细]

  • TSF:腾讯推出的PHP协程方案TSF,PHP,腾讯,php,swoole,linux,vim,udp,https,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工... [详细]

相关标签
  

闽ICP备14008679号