在laravel中使用swoole

最近阅读了许多技术博客,产生了加速php应用的想法.

众所周知,php是不支持多线程的 这样很难和那些常驻内存的静态语言比性能,有时候需要用到高并发的项目该怎么办呢?.

所幸,c语言编写的swoole给php多了一条路.

1,swoole是什么?

   swoole是一个标准的php扩展,但是又和其他扩展不同,swoole在接管php的控制权,并后会进入事件循环.

   当io发生的后,swoole会自动回调指定的php函数.

   也就是说类似于node.js  php在安装了swoole之后就会异步io  并且swoole会常驻内存,虽然达不到静态语言的性能,但是已经大大提高了php的性能.

   使用Swoole需要使用者有一定的linux编程基础. 对tcp协议族要非常的了解.这点不多说.

   swoole最强大的是以下几个东西:

  (1)swoole_async  异步io接口, 提供了异步文件io,定时器.  异步Mysql等. 这样就可以大大提高服务器的工作效率.

  (2)swoole_process  进程管理模块,可以方便的创建子进程,进程间通信.

  (3)swoole_buffer  强大的内存管理工具,像c一样进行指针运算,又无需关心内存的申请和释放,不用担心内存溢出.

  (4)swoole_table   基础共享内存和自旋锁实现的超高性能内存表,彻底解决线程,进程间的数据共享,加锁同步等问题.

2.在laravel中使用swoole

我比较推荐使用这个依赖包:laravelS

       这样可以在laravel应用中使用swoole

       首先惯例使用composer安装:

# 在你的Laravel/Lumen项目的根目录下执行
composer require "hhxsv5/laravel-s:~1.0" -vvv
# 确保你的composer.lock文件是在版本控制中 

      注册新的类库到laravel service provider  config/app.php  proviers加入

       Hhxsv5\LaravelS\Illuminate\LaravelSServiceProvider::class,

   发布配置文件:

   php artisan laravels publish

    以下是运行命令表:

    


php artisan laravels {start|stop|restart|reload|publish}

命令说明
start启动LaravelS,展示已启动的进程列表 ps -ef|grep laravels
stop停止LaravelS
restart重启LaravelS
reload平滑重启所有worker进程,这些worker进程内包含你的业务代码和框架(Laravel/Lumen)代码,不会重启master/manger进程
publish发布配置文件到你的项目中config/laravels.php

与Nginx配合使用(推荐)

gzip on;
gzip_min_length 1024;
gzip_comp_level 2;
gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml application/x-httpd-php image/jpeg image/gif image/png font/ttf font/otf image/svg+xml;
gzip_vary on;
gzip_disable "msie6";
upstream laravels {
    server 192.168.0.1:5200 weight=5 max_fails=3 fail_timeout=30s;
    #server 192.168.0.2:5200 weight=3 max_fails=3 fail_timeout=30s;
    #server 192.168.0.3:5200 backup;
}
server {
    listen 80;
    server_name laravels.com;
    root /xxxpath/laravel-s-test/public;
    access_log /yyypath/log/nginx/$server_name.access.log  main;
    autoindex off;
    index index.html index.htm;
    # Nginx处理静态资源(建议开启gzip),LaravelS处理动态资源。
    location / {
        try_files $uri @laravels;
    }
    # 当请求PHP文件时直接响应404,防止暴露public/*.php
    #location ~* \.php$ {
    #    return 404;
    #}
    location @laravels {
        proxy_http_version 1.1;
        # proxy_connect_timeout 60s;
        # proxy_send_timeout 60s;
        # proxy_read_timeout 120s;
        proxy_set_header Connection "keep-alive";
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Real-PORT $remote_port;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header Scheme $scheme;
        proxy_set_header Server-Protocol $server_protocol;
        proxy_set_header Server-Name $server_name;
        proxy_set_header Server-Addr $server_addr;
        proxy_set_header Server-Port $server_port;
        proxy_pass http://laravels;
    }
}

日记本

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

赞赏支持
被以下专题收入,发现更多相似内容