传递给 Ratchet\Session\SessionProvider::__construct() 的参数 1 必须实现接口 Ratchet\Http\HttpServerInterface

Posted

技术标签:

【中文标题】传递给 Ratchet\\Session\\SessionProvider::__construct() 的参数 1 必须实现接口 Ratchet\\Http\\HttpServerInterface【英文标题】:Argument 1 passed to Ratchet\Session\SessionProvider::__construct() must implement interface Ratchet\Http\HttpServerInterface传递给 Ratchet\Session\SessionProvider::__construct() 的参数 1 必须实现接口 Ratchet\Http\HttpServerInterface 【发布时间】:2018-11-23 11:58:03 【问题描述】:

我正在尝试在 Ratchet 中使用 sessionProvider,以下是我的 shell 脚本:

    namespace App\Console\Commands;

use Ratchet\Session\SessionProvider;
use Illuminate\Console\Command;
use Ratchet\Server\ioserver;
use App\Http\Controllers\WebSockets\Chat;
use Ratchet\WebSocket\WsServer;
use Ratchet\Http\HttpServer;
use Symfony\Component\HttpFoundation\Session\Storage\Handler;

class ChatShell extends Command

    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'command:chat';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Command description';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    
        parent::__construct();
    

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    
        $memcached = new \Memcached();


        $server = IoServer::factory(
            new HttpServer(
                new WsServer(
                    new SessionProvider(
                        new Chat(),
                        new Handler\MemcachedSessionHandler($memcached)
                    )
                )
            ),
            6502
        );

        $server->run();
    

发生错误说:

传递给 Ratchet\Session\SessionProvider::__construct() 的参数 1 必须实现接口 Ratchet\Http\HttpServerInterface,给定 App\Http\Controllers\WebSockets\Chat 的实例

如何解决这个问题!

我的聊天类实现MessageComponentInterface

【问题讨论】:

【参考方案1】:

好的,经过长时间的搜索,我找到了解决方案,尽管ratchet document 说 sessionProvider 被 WsServer 包装,但 sessionProvider 应该 包装 WsServer。

扭曲应该是这样的:

IoServer::factory(
        new HttpServer(
            new SessionProvider(
                new WsServer(
                    new Chat()
                ),
                new Handler\MemcachedSessionHandler($memcached)
            )
        ),
        6502
    );

【讨论】:

以上是关于传递给 Ratchet\Session\SessionProvider::__construct() 的参数 1 必须实现接口 Ratchet\Http\HttpServerInterface的主要内容,如果未能解决你的问题,请参考以下文章

无法正确地将值从父母传递给孩子和孩子传递给父母

如何将对象数组作为道具传递给组件,然后将数组的成员作为道具传递给嵌套组件?

为啥将 ClientID 传递给 javascript 函数会传递整个控件?

将变量传递给 jQuery 插件参数

如何将环境变量传递给传递给xmllint的命令?

将 JSON 数据从 php 传递给 html-data 属性,然后传递给 Javascript