search
HomePHP FrameworkLaravelShare laravel-echo-server broadcast service construction

The following tutorial column will introduce you to the construction of laravel-echo-server broadcast service. I hope it will be helpful to friends in need!

Share laravel-echo-server broadcast service constructionMotivation

Many scenarios in current projects use Redis queues and scheduled tasks to handle tasks that take longer to execute. These tasks The execution status and execution results can only be obtained by re-sending a request from the front end.

Goal

In order to optimize the program experience and allow users to pay attention to the task execution results as early as possible, we have evaluated various options. In order to reduce the communication cost between the front and back ends and avoid reinventing the wheel, we decided to use the broadcast function built into the Laravel framework.

Select a service

Officially recommends using pusher to build applications. The advantage of pusher is that it is very simple to build. However, considering that it is a foreign service, there is a risk of access stability; and the current project scale is small, so I tried to build a Websocket service myself, using the tlaverdure/laravel-echo-server project officially mentioned by the Laravel framework.

laravel-echo-server service features

The usage method of this project can be obtained directly from their github page. The following points are what we like:

Event information can be obtained and broadcast through the publish and subscribe function of Redis. This is more efficient than sending push requests to pusher's HTTP API;

It is also compatible with pusher's HTTP API. If some services cannot publish events through Redis, you can use this mode to push events;
  1. Building Websocket services

We initially used oanhnn/laravel -echo-server This image is used to start the container. During the debugging process, we found that this service is not stable. Node's service will exit directly when an exception occurs. This is the first pitfall we encountered. In order to quickly solve this problem, we added a supervisor based on this image to be responsible for the task of restarting the service process after exiting, and made our own image.

Redis Subscription

When trying out Redis subscription, in addition to the regular database address and password and other parameters, the key prefix is ​​another pitfall we encountered, corresponding to The keyPrefix configuration item in the laravel-echo-server.json file in the laravel-echo-server service did not find the correct method at the beginning, and it was incorrect no matter how it was configured. Later I found out that if you want to know the current Redis key prefix of the program that wants to broadcast the event, just execute the following script in tinker.
# php artisan tinkerconfig('database.redis.options.prefix');

Nginx proxy

Since the production environment uses the HTTPS protocol, I need to add a certificate to the service, but because I am a Node novice, no Node program uses the certificate Configuration experience, so I basically gave up after one round of attempts, and then adopted the Nginx proxy method to use the certificate. After several rounds of attempts, the configuration was finally successful.
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";
    }}

Private/Attendance Channel Authorization

The front-end program first sends an HTTP POST request to the laravel-echo-server service;

laravel-echo-server sends an HTTP POST to the application server based on the two items
    authEndpoint
  1. and
  2. authHost
  3. in the configuration. The POST data is the channel name and is transparently transmitted in the header. Authorization data; laravel-echo-server will determine the authorization result based on the response of the application server. If the application server responds with a non-HTTP 200 status, it means that an error occurred and the authorization failed.
  4. We encounter two problems in practice. The first problem is that the authorization gatekeeping logic of our project is not laravel's default, so the routes introduced by the default
  5. Broadcast::routes()
  6. cannot be used directly. After discovering the problem, we re-added our own authorization route and configured it in the
authEndpoint

configuration item of laravel-echo-server.json. <p>Another problem is that we do not use the standard RESTFul protocol rules: respond to the corresponding HTTP Code to describe the error status. As a result, laravel-echo-server cannot detect the problem and feed it back to the front-end program even when authorization fails. The situation is similar to the picture below: </p> <p><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/020/ce24538de7ea16b3b939356a59350b87-0.jpg?x-oss-process=image/resize,p_40" class="lazy" alt=""></p> <blockquote>##Sooner or later, you still have to pay off the debt. …<p></p> </blockquote> <h2 id="Summary-span-class-header-link-octicon-octicon-link-span-The-development-of-this-function-was-not-as-smooth-as-originally-thought-The-main-problems-are-as-follows">##Summary<span class="header-link octicon octicon-link"></span>The development of this function was not as smooth as originally thought. The main problems are as follows:</h2> <p></p>laravel-echo-server is not as robust as expected. I have to look for alternatives when I have time in the future. It seems that there are also projects using swoole. You can try it; <ol> <li>Forgot to consider the SSL problem in advance, resulting in The temporary processing during release was hectic; </li> <li>laravel-echo-server and laravel-echo themselves are small projects. When encountering problems, you should give priority to analyzing their codes to reduce the time of trying. </li> <li> </ol>

The above is the detailed content of Share laravel-echo-server broadcast service construction. For more information, please follow other related articles on the PHP Chinese website!

Statement
This article is reproduced at:learnku. If there is any infringement, please contact admin@php.cn delete
laravel单点登录方法详解laravel单点登录方法详解Jun 15, 2022 am 11:45 AM

本篇文章给大家带来了关于laravel的相关知识,其中主要介绍了关于单点登录的相关问题,单点登录是指在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统,下面一起来看一下,希望对大家有帮助。

一起来聊聊Laravel的生命周期一起来聊聊Laravel的生命周期Apr 25, 2022 pm 12:04 PM

本篇文章给大家带来了关于laravel的相关知识,其中主要介绍了关于Laravel的生命周期相关问题,Laravel 的生命周期从public\index.php开始,从public\index.php结束,希望对大家有帮助。

laravel中guard是什么laravel中guard是什么Jun 02, 2022 pm 05:54 PM

在laravel中,guard是一个用于用户认证的插件;guard的作用就是处理认证判断每一个请求,从数据库中读取数据和用户输入的对比,调用是否登录过或者允许通过的,并且Guard能非常灵活的构建一套自己的认证体系。

laravel中asset()方法怎么用laravel中asset()方法怎么用Jun 02, 2022 pm 04:55 PM

laravel中asset()方法的用法:1、用于引入静态文件,语法为“src="{{asset(‘需要引入的文件路径’)}}"”;2、用于给当前请求的scheme前端资源生成一个url,语法为“$url = asset('前端资源')”。

实例详解laravel使用中间件记录用户请求日志实例详解laravel使用中间件记录用户请求日志Apr 26, 2022 am 11:53 AM

本篇文章给大家带来了关于laravel的相关知识,其中主要介绍了关于使用中间件记录用户请求日志的相关问题,包括了创建中间件、注册中间件、记录用户访问等等内容,下面一起来看一下,希望对大家有帮助。

laravel中间件基础详解laravel中间件基础详解May 18, 2022 am 11:46 AM

本篇文章给大家带来了关于laravel的相关知识,其中主要介绍了关于中间件的相关问题,包括了什么是中间件、自定义中间件等等,中间件为过滤进入应用的 HTTP 请求提供了一套便利的机制,下面一起来看一下,希望对大家有帮助。

laravel的fill方法怎么用laravel的fill方法怎么用Jun 06, 2022 pm 03:33 PM

在laravel中,fill方法是一个给Eloquent实例赋值属性的方法,该方法可以理解为用于过滤前端传输过来的与模型中对应的多余字段;当调用该方法时,会先去检测当前Model的状态,根据fillable数组的设置,Model会处于不同的状态。

laravel路由文件在哪个目录里laravel路由文件在哪个目录里Apr 28, 2022 pm 01:07 PM

laravel路由文件在“routes”目录里。Laravel中所有的路由文件定义在routes目录下,它里面的内容会自动被框架加载;该目录下默认有四个路由文件用于给不同的入口使用:web.php、api.php、console.php等。

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
2 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
3 weeks agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

SublimeText3 English version

SublimeText3 English version

Recommended: Win version, supports code prompts!

MantisBT

MantisBT

Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

WebStorm Mac version

WebStorm Mac version

Useful JavaScript development tools