首页 > 解决方案 > Laravel 自定义 websocket 处理程序不起作用

问题描述

网页.php

use Symfony\Component\Console\Output\NullOutput;
use BeyondCode\LaravelWebSockets\Server\Logger\WebsocketsLogger;

app()->singleton(WebsocketsLogger::class, function () {
    return (new WebsocketsLogger(new NullOutput()))->enable(false);
});

use BeyondCode\LaravelWebSockets\Facades\WebSocketsRouter;

WebSocketsRouter::webSocket('/my-websocket', \App\MyCustomWebSocketHandler::class);

MyCustomWebSocketHandler

<?php

namespace App;

use Ratchet\ConnectionInterface;
use Ratchet\RFC6455\Messaging\MessageInterface;
use Ratchet\WebSocket\MessageComponentInterface;
use BeyondCode\LaravelWebSockets\WebSockets\WebSocketHandler;

class MyCustomWebSocketHandler extends WebSocketHandler
{

    public function onMessage(ConnectionInterface $connection, MessageInterface $msg)
    {
        // TODO: Implement onMessage() method.
    }
}

客户

let socket = new WebSocket("ws://localhost:6001/app/websocketkey/my-websocket?protocol=7&client=js&version=4.3.1&flash=false");

尝试运行客户端连接时,它没有连接到自定义处理程序。默认处理程序工作正常。

和正在Websocket:serve运行artisan:serve

参考1、2

对此有什么想法吗?在这里尝试了演示

标签: phplaravelwebsocket

解决方案


如下设置 websocket 路由解决了该问题。

use Symfony\Component\Console\Output\NullOutput;
use BeyondCode\LaravelWebSockets\Server\Logger\WebsocketsLogger;

app()->singleton(WebsocketsLogger::class, function () {
    return (new WebsocketsLogger(new NullOutput()))->enable(false);
});

use BeyondCode\LaravelWebSockets\Facades\WebSocketsRouter;

WebSocketsRouter::webSocket('/app/{appkey}/my-websocket', \App\MyCustomWebSocketHandler::class);

推荐阅读