在laravel5.8中集成swoole组件----用协程实现的服务端和客户端(nginx配置篇章)
生活随笔
收集整理的這篇文章主要介紹了
在laravel5.8中集成swoole组件----用协程实现的服务端和客户端(nginx配置篇章)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
- laravel項目中的配置? 原文出處:https://laravelacademy.org/post/19700.html,感謝原文作者讓laravel這款可愛的php框架,進入了高并發(fā)的殿堂
類聲明在項目app目錄下的Services(沒有就自己建一個)目錄,
也許這些命名空間已經(jīng)多的把你嚇了一跳,但其實他們都源自你安裝的laravelS組件,類的實現(xiàn)部分你也許并不感到陌生,沒錯,
他們就是按照swoole websocket原生類進行了封裝
Hhxsv5類空間的源碼可以參照 項目空間下的vendor/hhxsv5/laravel-s/src/Swoole/Coroutine <?php
namespace App\Services;
use Hhxsv5\LaravelS\Swoole\WebSocketHandlerInterface;
use Illuminate\Support\Facades\Log;
use Swoole\Http\Request;
use Swoole\WebSocket\Frame;
use Swoole\WebSocket\Server;
class mywebsocket implements WebSocketHandlerInterface
{
public function __construct()
{
Log::info('launching laravel-swoole websocket');
}
public function onOpen(Server $server, Request $request)
{
Log::info('launching swoole websocket');
$server->push($request->fd,'歡迎使用,基于swoole的laravel websocket');
}
public function onMessage(Server $server, Frame $frame)
{
$server->push($frame->fd,date('Y-m-dH:i:s').'服務器響應你的請求');
}
public function onClose(Server $server, $fd, $reactorId)
{
Log::info('websocket服務器關(guān)閉');
}
}
然后,你就要到config目錄下找到laravels.php,進行一番配置。
找到下列關(guān)聯(lián)數(shù)組的鍵名,并作配置
'websocket' => ['enable' => true,'handler'=>\App\Services\mywebsocket::class,#這個就是上述聲明的類//'handler' => XxxWebSocketHandler::class,], 'swoole' => [...// 每隔 60s 檢測一次所有連接,如果某個連接在 600s 內(nèi)都沒有發(fā)送任何數(shù)據(jù),則關(guān)閉該連接'heartbeat_idle_time' => 600,'heartbeat_check_interval' => 60,... ],- nginx配置部分(分站點配置)
.conf文件進行配置的,如果你急于上機,不妨全部拷貝,把域名更改過來 map $http_upgrade $connection_upgrade #這行代碼的目的是把http協(xié)議 “提升”到websocket協(xié)議的標準
{default upgrade;'' close; } upstream laravels {#server后面是需要監(jiān)聽的ip地址,如果你使用了docker容器部署你的項目,那server后面跟的是容器名# Connect IP:Portserver yinti.com:5200 weight=5 max_fails=3 fail_timeout=30s;keepalive 16; }server {listen 88;#端口可以根據(jù)項目實際需要進行調(diào)整server_name yinti.com;root /dingshub2/yinti/public;index index.html index.htm index.php;location / {# WordPress固定鏈接URL重寫try_files $uri @laravels;}# PHP配置location ~ \.php$ {fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;}#下面這段是websocket服務器的具體部署實現(xiàn)location =/ws {# proxy_connect_timeout 60s;# proxy_send_timeout 60s;# proxy_read_timeout: Nginx will close the connection if
the proxied server does not send data to Nginx in 60 seconds; # At the same time, this close behavior is also affected by heartbeat setting of Swoole.# proxy_read_timeout 60s;proxy_http_version 1.1;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_set_header Upgrade $http_upgrade;proxy_set_header Connection $connection_upgrade;proxy_pass http://laravels; }#我只知道下面的配置必須有l(wèi)ocation @laravels {# proxy_connect_timeout 60s;# proxy_send_timeout 60s;# proxy_read_timeout 60s;proxy_http_version 1.1;proxy_set_header Connection "";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; }#我部署的靜態(tài)資源服務器,你的項目可有可無location ~ .*\.(gif|jpg|jpeg|png|js|css)$ {expires 24h;root /dingshub2/yinti/public/static;proxy_store on;proxy_store_access user:rw group:rw all:rw;proxy_temp_path /dingshub2/yinti/public/static;#圖片訪問路徑proxy_redirect off;proxy_set_header Host 127.0.0.1;client_max_body_size 10m;client_body_buffer_size 1280k;proxy_connect_timeout 900;proxy_send_timeout 900;proxy_read_timeout 900;proxy_buffer_size 40k;proxy_buffers 40 320k;proxy_busy_buffers_size 640k;proxy_temp_file_write_size 640k;if ( !-e $request_filename){proxy_pass http://127.0.0.1;#默認80端口 }} }
- html實現(xiàn)部分(blade模版,繼承了母版頁)
- js具體實現(xiàn)----點擊按鈕即實現(xiàn)websocket服務器的連接
?
(未完待續(xù))
?
轉(zhuǎn)載于:https://www.cnblogs.com/saintdingspage/p/11272418.html
總結(jié)
以上是生活随笔為你收集整理的在laravel5.8中集成swoole组件----用协程实现的服务端和客户端(nginx配置篇章)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android navigation b
- 下一篇: linux crontab怎么写,lin