为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 ReactPHP 和 Ratchet 在同一端口上运行 WebSocket

如何使用 ReactPHP 和 Ratchet 在同一端口上运行 WebSocket

PHP
泛舟湖上清波郎朗 2022-07-09 09:40:06
我有以下代码:use Ratchet\Http\HttpServer;use Ratchet\WebSocket\WsServer;$loop = \React\EventLoop\Factory::create();$socketServer = new \React\Socket\Server('127.0.0.1:8080', $loop);$httpServer = new \React\Http\Server(function(\Psr\Http\Message\ServerRequestInterface $request) {  return new \React\Http\Response(200, [      'Content-Type' => 'text/plain'    ],    'Hello, World'  );});$httpServer->listen($socketServer);$rrServer = new RRServer(); // Implements MessageComponentInterface$webSocketServer = new IoServer(  new HttpServer(    new WsServer(      $rrServer    )  ),  $socketServer,  $loop);$webSocketServer->run();该代码有效,但我只能使用http://localhost:8080访问它,当我尝试使用 WebSocket 连接时,连接打开,然后立即关闭。另外,当我创建一个具有不同端口的新套接字时,我可以同时使用 http:// 和 ws://我的代码有什么问题?如何在同一个端口上运行 WebSocket 和 HTTP Server?
查看完整描述

2 回答

?
慕哥9229398

TA贡献1877条经验 获得超6个赞

嘿 ReactPHP 核心团队成员。简而言之,您可以在一个端口上使用so_reuseport套接字服务器上的两个服务器进行侦听,但这只是与其中任何一个的循环连接。你可以做的是尝试 cboden 的建议,我在这里做了,如果你有任何问题,请告诉我们:https ://github.com/ratchetphp/Ratchet/issues/771#issuecomment-569439423

即:


查看完整回答
反对 回复 2022-07-09
?
不负相思意

TA贡献1777条经验 获得超10个赞

实际上你不能在同一个端口上运行多个 websocket。但您可以将所有 websocket 合二为一。并用这样的 url 查询将它们分开。


http://localhost:8080?source=socket_1

http://localhost:8080?source=socket_2

并且在您的代码中可以通过以下方式获取请求来源:


function onOpen( ConnectionInterface $conn ) {

    $querystring = $conn->WebSocket->request->getQuery()->toArray();

    if($querystring['source'] == 'socket_1'){

        // run socket 1 jobs

    else{

        // do socket 2

    }

    // and change

}

我没有这样做,我没有测试它。所以 ... :)


查看完整回答
反对 回复 2022-07-09
  • 2 回答
  • 0 关注
  • 225 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号