第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何擴展laravel websockets服務器(BeyondCode)以直接觸發(fā)larave

如何擴展laravel websockets服務器(BeyondCode)以直接觸發(fā)larave

PHP
元芳怎么了 2023-10-22 21:09:54
我研究了很長時間,據(jù)我了解,從我的 laravel 基礎應用程序來看,BeyondCode 由 websockets 服務器觸發(fā)的 websocket 事件只是一種消息傳遞方式。消息可以從 laravel 基礎應用程序發(fā)送到客戶端(客戶端對消息做出反應)。來自其他 websocket 客戶端的事件發(fā)送到 websocket 服務器并且我的 laravel 基礎應用程序對其做出反應(觸發(fā)事件)尚未實現(xiàn)。要觸發(fā)我的 laravel 基礎應用程序上的事件,可以使用 webhooks。這是對通用生成路由的標準 http 請求。我理解得對嗎?如果我無法接收消息/事件,為什么我的 Laravel 基礎應用程序有一個由 WebSocket 服務器提供服務的服務器?在這種情況下,為什么我應該只使用一個方向的 websocket?我還是一個 laravel 新手。我想更改/覆蓋一些類,查看BeyondCode\LaravelWebSockets\WebSockets\Channels\Channel,以便在正確的套接字發(fā)送正確的事件時使某些通道觸發(fā)事件。如何用我BeyondCode\LaravelWebSockets\WebSockets\Channels\Channel自己的類覆蓋該類而不弄亂 BeyondCode 的 websocket 包?我不想碰供應商的東西。websocket 服務器是完全獨立的還是我可以從服務器類中訪問我的基本應用程序?如果我這樣做,我需要注意什么?
查看完整描述

3 回答

?
繁華開滿天機

TA貢獻1816條經(jīng)驗 獲得超4個贊

您可以將庫復制到項目目錄中并在以下位置設置路徑composer.json:


? ? "repositories": [

? ? ? ? {

? ? ? ? ? ? "type": "path",

? ? ? ? ? ? "url": "path-to-the-copy-of-the-library"

? ? ? ? }

? ? ],

或者您可以創(chuàng)建另一個存儲庫并分叉該庫并再次編輯composer.json:


? ? "repositories": [

? ? ? ? {

? ? ? ? ? ? "type": "vcs",

? ? ? ? ? ? "url": "URL-to-your-repository"

? ? ? ? }

? ? ],

確保您的庫符合要求:


? ? "require": {

? ? ? ? "beyondcode/laravel-websockets": "*",

? ? }

然后運行composer install


查看完整回答
反對 回復 2023-10-22
?
當年話下

TA貢獻1890條經(jīng)驗 獲得超9個贊

需要一些時間來解決這個問題,但現(xiàn)在我找到了一個答案,最小化了供應商代碼的覆蓋。


感興趣的文件位于 Channels 文件夾下方:


|-- laravel-websockets

|   |-- src

|   |   |-- WebSockets

|   |   |   |-- Channels

|   |   |   |   |-- ChannelManagers

|   |   |   |   |-- ArrayChannelManager.php

|   |   |   |-- Channel.php

|   |   |   |-- ChannelManager.php

|   |   |   |-- PresenceChannel.php

|   |   |   |-- PrivateChannel.php

在 中Channel.php,PresenceChannel.php所有PrivateChannel.php推送服務器相關事件均得到處理。例如,訂閱和發(fā)送消息。該類ArrayChannelManager控制 PrivateChannel、PresenceChannel 和 Channel 使用的類。


Laravel-websockets 使您可以為您的項目使用自己的通道管理器,在 中指定/config/websockets.php -> 'channel_manager'。


為了將 Laravel 事件添加到推送服務器事件,我重載ArrayChannelManager了PrivateChannel(如果需要,您也可以重載其他通道)并添加了 Laravel 排隊事件。在/config/websockets.php我使用我的重載類作為channel_manager。


/config/websockets.php:


'channel_manager' => \App\Lib\Overwrite\LaravelWebsockets\ArrayChannelManager::class,

我重載的 ArrayChannelManager:


<?php


namespace App\Lib\Overwrite\LaravelWebsockets;


use BeyondCode\LaravelWebSockets\WebSockets\Channels\Channel;

use BeyondCode\LaravelWebSockets\WebSockets\Channels\ChannelManager;

use BeyondCode\LaravelWebSockets\WebSockets\Channels\ChannelManagers\ArrayChannelManager as ArrayChannelManagerBase;

use BeyondCode\LaravelWebSockets\WebSockets\Channels\PresenceChannel;

use App\Lib\Overwrite\LaravelWebsockets\PrivateChannel;

use Illuminate\Support\Arr;

use Illuminate\Support\Str;

use Ratchet\ConnectionInterface;


class ArrayChannelManager extends ArrayChannelManagerBase

{


    protected function determineChannelClass(string $channelName): string

    {

        if (Str::startsWith($channelName, 'private-')) {

            return PrivateChannel::class;

        }


        if (Str::startsWith($channelName, 'presence-')) {

            return PresenceChannel::class;

        }


        return Channel::class;

    }

    

    

};

在我的重載PrivateChannel文件中,我將 a 掛鉤MyPusherLaravelEvent到推送器訂閱事件:


<?php


namespace App\Lib\Overwrite\LaravelWebsockets;


use BeyondCode\LaravelWebSockets\WebSockets\Channels\PrivateChannel as PrivateChannelBase;

use Ratchet\ConnectionInterface;

use stdClass;


class PrivateChannel extends PrivateChannelBase

{

    public function subscribe(ConnectionInterface $connection, stdClass $payload)

    {

        parent::subscribe($connection, $payload);

        \App\Events\MyPusherLaravelEvent::dispatch($this->channelName);

    }

}

使用 Laravel 排隊事件將事件處理與推送服務器分開非常重要。https://laravel.com/docs/8.x/events#queued-event-listeners


您還可以將事件掛鉤到Channel::broadcast...函數(shù),然后解析內容以對服務器的某些客戶端命令做出反應。


以通用方式重載函數(shù),因此可以更新供應商代碼,而無需用重載破壞它。


查看完整回答
反對 回復 2023-10-22
?
ibeautiful

TA貢獻1993條經(jīng)驗 獲得超6個贊

你不需要覆蓋任何東西,你的 laravel 后端將向 websockets 服務器發(fā)出一個事件,websockets 服務器將在相應的通道中將事件發(fā)送回你的前端



查看完整回答
反對 回復 2023-10-22
  • 3 回答
  • 0 關注
  • 225 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號