如何实现一个端口多种协议

Porygon

问题描述

最近在研究laravel-echo-server 其中在客户端连接前, 客户端会发送http协议的api请求sid,然后通过websocket连接到相同的地址。请问workerman能够做到一个端口多个协议吗?要怎么实现?

为此你搜索到了哪些方案及不适用的原因

在这里我找到了充电桩上行通信协议的问题和文档,但是作者只是在表示 单端口单协议 多进程多端口

690 1 6
1个回答

walkor

可以,比如同时支持http和websocket代码类似

<?php
require_once __DIR__ . '/vendor/autoload.php';

use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
use Workerman\Worker;
use Workerman\Protocols\Websocket;

$worker = new Worker('http://0.0.0.0:1234');
$worker->onMessage = function (TcpConnection $connection, $request) {
    if ($request instanceof Request) {
        if ($request->header('upgrade') == 'websocket') {
            $connection->protocol = Websocket::class;
            Websocket::input($request, $connection);
            return;
        }
        $connection->send('http');
        return;
    }
    $connection->send('websocket');
};
Worker::runAll();
  • Porygon 2023-08-10

    感谢感谢 我刚在csdn找到nodejs版本想着怎么改来着 作者牛逼!

  • 小W 2023-08-10

    请求代理?

  • 小W 2023-08-10

    使用nginx应该更方便

🔝