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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

也許這些命名空間已經(jīng)多的把你嚇了一跳,但其實(shí)他們都源自你安裝的laravelS組件,類的實(shí)現(xiàn)部分你也許并不感到陌生,沒錯(cuò),
他們就是按照swoole websocket原生類進(jìn)行了封裝
Hhxsv5類空間的源碼可以參照 項(xiàng)目空間下的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').'服務(wù)器響應(yīng)你的請求');
}

public function onClose(Server $server, $fd, $reactorId)
{
Log::info('websocket服務(wù)器關(guān)閉');
}
}

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

找到下列關(guān)聯(lián)數(shù)組的鍵名,并作配置

'websocket' => ['enable' => true,'handler'=>\App\Services\mywebsocket::class,#這個(gè)就是上述聲明的類//'handler' => XxxWebSocketHandler::class,], 'swoole' => [...// 每隔 60s 檢測一次所有連接,如果某個(gè)連接在 600s 內(nèi)都沒有發(fā)送任何數(shù)據(jù),則關(guān)閉該連接'heartbeat_idle_time' => 600,'heartbeat_check_interval' => 60,... ],
  • nginx配置部分(分站點(diǎn)配置)
如果你對nginx多站點(diǎn)配置還感到陌生,可以隨便搜羅一篇博文來看,這里的配置是在分站點(diǎn)目錄vhosts下的,針對目標(biāo)站點(diǎn)的
.conf文件進(jìn)行配置的,如果你急于上機(jī),不妨全部拷貝,把域名
更改過來 map $http_upgrade $connection_upgrade #這行代碼的目的是把http協(xié)議 “提升”到websocket協(xié)議的標(biāo)準(zhǔn)
{
default upgrade;'' close; } upstream laravels {#server后面是需要監(jiān)聽的ip地址,如果你使用了docker容器部署你的項(xiàng)目,那server后面跟的是容器名# Connect IP:Portserver yinti.com:5200 weight=5 max_fails=3 fail_timeout=30s;keepalive 16; }server {listen 88;#端口可以根據(jù)項(xiàng)目實(shí)際需要進(jìn)行調(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服務(wù)器的具體部署實(shí)現(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)資源服務(wù)器,你的項(xiàng)目可有可無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;#默認(rèn)80端口 }} }
  • html實(shí)現(xiàn)部分(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">四海之內(nèi)皆兄弟,請文明交流</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">進(jìn)入聊天室</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具體實(shí)現(xiàn)----點(diǎn)擊按鈕即實(shí)現(xiàn)websocket服務(wù)器的連接
$("#joinin").click(function() {var mysocket = new WebSocket('ws://yinti.com:5200/ws');mysocket.onopen=function (event) {$("#chatpad").val("");$("#chatpad").val("大家好!音提來了\n");};});

?

(未完待續(xù))

?

轉(zhuǎn)載于:https://www.cnblogs.com/saintdingspage/p/11272418.html

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。