日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

在laravel5.8中集成swoole组件----用协程实现的服务端和客户端(nginx配置篇章)

發布時間:2023/12/10 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在laravel5.8中集成swoole组件----用协程实现的服务端和客户端(nginx配置篇章) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • laravel項目中的配置? 原文出處:https://laravelacademy.org/post/19700.html,感謝原文作者讓laravel這款可愛的php框架,進入了高并發的殿堂
如果你已經成功安裝了laravelS組件,并用他接管了你的laravel項目,那么接下來就是實現一個websocket服務器的類,
類聲明在項目app目錄下的Services(沒有就自己建一個)目錄,

也許這些命名空間已經多的把你嚇了一跳,但其實他們都源自你安裝的laravelS組件,類的實現部分你也許并不感到陌生,沒錯,
他們就是按照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服務器關閉');
}
}

然后,你就要到config目錄下找到laravels.php,進行一番配置。

找到下列關聯數組的鍵名,并作配置

'websocket' => ['enable' => true,'handler'=>\App\Services\mywebsocket::class,#這個就是上述聲明的類//'handler' => XxxWebSocketHandler::class,], 'swoole' => [...// 每隔 60s 檢測一次所有連接,如果某個連接在 600s 內都沒有發送任何數據,則關閉該連接'heartbeat_idle_time' => 600,'heartbeat_check_interval' => 60,... ],
  • nginx配置部分(分站點配置)
如果你對nginx多站點配置還感到陌生,可以隨便搜羅一篇博文來看,這里的配置是在分站點目錄vhosts下的,針對目標站點的
.conf文件進行配置的,如果你急于上機,不妨全部拷貝,把域名
更改過來 map $http_upgrade $connection_upgrade #這行代碼的目的是把http協議 “提升”到websocket協議的標準
{
default upgrade;'' close; } upstream laravels {#server后面是需要監聽的ip地址,如果你使用了docker容器部署你的項目,那server后面跟的是容器名# Connect IP:Portserver yinti.com:5200 weight=5 max_fails=3 fail_timeout=30s;keepalive 16; }server {listen 88;#端口可以根據項目實際需要進行調整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服務器的具體部署實現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; }#我只知道下面的配置必須有location @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; }#我部署的靜態資源服務器,你的項目可有可無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實現部分(blade模版,繼承了母版頁)
@extends('masterpage.chatroom')@section('passage')<div class="pricing-header px-3 py-3 pt-md-5 pb-md-4 mx-auto text-center"><h1 class="display-4">帥哥聊天室</h1><p class="lead">四海之內皆兄弟,請文明交流</p></div> @endsection@section('pad')<div class="card-deck mb-3"><div class="card mb-10 box-shadow"><div class="card-header"><h4 class="my-0 font-weight-normal text-center">交流板</h4></div><div class="card-body"><h1 class="card-title pricing-card-title"> <small class="text-muted"></small></h1><textarea id="chatpad" class='form-control' cols="90" rows="20"></textarea><p style="margin-left: 2px" class="my-0 font-weight-normal">消息輸入框</p><textarea class='form-control' cols="90" rows="8"></textarea><br><button id="joinin" type="button" class="btn btn-lg btn-block btn-outline-primary">進入聊天室</button></div></div></div> @endsection@section('tailscript')<script src="{{asset(config('mystatic._js_').'/jquery-3.3.1.min.js')}}" ></script><script src="{{asset(config('mystatic._myjs_').'/joinintalk.js')}}"></script> @endsection
  • js具體實現----點擊按鈕即實現websocket服務器的連接
$("#joinin").click(function() {var mysocket = new WebSocket('ws://yinti.com:5200/ws');mysocket.onopen=function (event) {$("#chatpad").val("");$("#chatpad").val("大家好!音提來了\n");};});

?

(未完待續)

?

轉載于:https://www.cnblogs.com/saintdingspage/p/11272418.html

總結

以上是生活随笔為你收集整理的在laravel5.8中集成swoole组件----用协程实现的服务端和客户端(nginx配置篇章)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。