search
HomePHP FrameworkSwooleHow to use swoole in laravel

How to use swoole in laravel

Dec 12, 2019 am 10:28 AM
laravelswooleuse

How to use swoole in laravel

PHP's asynchronous, parallel, high-performance network communication engine is written in pure C language and provides an asynchronous multi-threaded server in PHP language, asynchronous TCP/UDP network client, and asynchronous MySQL , asynchronous Redis, database connection pool, AsyncTask, message queue, millisecond timer, asynchronous file reading and writing, asynchronous DNS query. Swoole has built-in Http/WebSocket server/client and Http2.0 server.

The documentation on Swoole's official website is not rich enough, which is a headache, but most of the problems are explained. If you are interested in Swoole, then check out this Swoole introductory tutorial. Swoole provides many awesome functions such as multi-threading and long connections, which brings PHP to a new level. For details, you can read the introductory tutorial. This article is limited to discussing the combination of Laravel and Swoole.

In order to provide services, Swoole must run in CLI mode. What is CLI mode? If your Swoole business code is written in a file called server.php, then enter php server.php on the command line to open it. This is a headache, because the Laravel framework does not work like this, so how can it be combined with Laravel? That’s right, it’s that simple to customize an Artisan Command.

STEP 1-Customize Command

About customizing Artisan Commnad, all the technical points you need to know are here. I customized a command called SwooleCommand. Directly paste the key code:

How to use swoole in laravel

fire is the entrance

Execute php artisan swoole start on the command line (CLI) to start the Swoole service. Analyzing the code, you can see that the command parameters include startup, restart, and shutdown. I only implemented the startup part to save trouble. If you need to shut down, use the kill command to shut down the process in Linux. The steps are quite simple:

1. Execute the ps -aux|grep artisan command to get the pid (there are multiple processes, just kill the first one)

2. Execute the kill pid command, the pid is the one you obtained in the first step

The configuration of Swoole is not within the scope of this article. Please go to the official website. The Swoole service is saved in the $serv variable here for Laravel to send commands for interaction later. You can see that Swoole's event response code is like this:

How to use swoole in laravel

Use Handler to handle event responses

If fire opens the door to Swoole, then The handler here is the conveyor belt between Swoole and Laravel. Using the handler you write, you can write various business logic into the Laravel framework, and then you can use the various efficient and convenient functions provided by Laravel. "Handler" is a naming convention. You can also call it "callback", "manager", or "listener". It depends on your naming habits. I did not use the new method but used Laravel's IoC to inject App::make, mainly to save trouble (because the handler's constructor uses my custom data processing class, see below).

STEP 2-Custom handler

Because it is a custom class, please follow the namespace and declare it in composer.json. After completion, execute composer dump-autoload Update the command. For example, if I create a folder app\handlers to store handlers, it looks like this in composer.json:

How to use swoole in laravel

autoload cannot be less

Then It's up to you to decide what exactly is done in the handler. Anyway, it’s almost the same as writing a controller. You can use all the functions of the Laravel framework at will. Paste mine:

How to use swoole in laravel

I mentioned in the previous section that I use IoC because of the structure The server uses its own data processing class. I put additions, deletions, modifications, queries, and other data processing services into the Repository. There is no other reason, but this way the code looks cleaner. In this way, the process of using Swoole to receive data is completed, but what should I do if I want to use Swoole to send data to the client? Ahem, this is a little more troublesome and requires a curve method to implement. Continue to the next section.

STEP 3-Send data

There are two methods, but both are inseparable from a cache kv structure (Laravel’s own Cache function is enough), save The client's address data, otherwise how would you know where to send it. I use the first one, which saves trouble. Swoole has nothing to do with sending data. If you need a long-term websocket connection, this does not apply. Just use the second one. If you have a better way, please tell me!

The first one: fsockopen

It’s quite simple and has nothing to do with swoole. Use Swoole’s connection_info function to get the client’s IP address and port, and then use fsockopen to send data directly.

Second type: Internal port listening

Swoole supports monitoring multiple ports. The idea of ​​implementation is to use fsockopen to send data to the internal listening port, and then call $serv to send messages. The advantage of this is that you don't need to know the actual IP address and port of the client. You can save the client's $fd identifier in the Cache and send the data directly. Using this idea, please remember to open the port with iptables. I didn't use it myself, because I thought it was too troublesome without a long connection.

Summary

Swoole is very good, but I haven’t actually used it much (I’ll wait until I have enough money for the project). You can also refer to the configuration on the official website and use Swoole as the nginx hosting agent. It is said that the performance is greatly improved.

PHP Chinese website has a large number of free Swoole introductory tutorials, everyone is welcome to learn!

The above is the detailed content of How to use swoole in laravel. For more information, please follow other related articles on the PHP Chinese website!

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

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

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

Dreamweaver Mac version

Dreamweaver Mac version

Visual web development tools

SecLists

SecLists

SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Powerful PHP integrated development environment

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)