如何从 PHP 服务器而非 Javascript 连接到 Websocket 服务器

How to connect to Websocket Server from PHP Server NOT Javascript

我是 运行 棘轮网络套接字服务器。由于一些复杂的情况,我需要能够通过我的PHP服务器实时而不是Javascript与这个websocket服务器通信,以便能够向它发送信息然后将稍后传递给连接到它的任何客户端。

我在 Whosebug 上四处看了看,但一切都是关于如何使用 PHP 创建 websocket 服务器,这不是我要找的。

下面是我要实现的目标的视觉效果。

这里的关键是如何使用 PHP?

连接到 ratchet 之类的 Websocket 服务器

我有的东西tried/considered:

我考虑过使用序列化方法。这将在数​​据库中序列化和反序列化。不知道这个比这个方法好不好,请指教

这是我开始的地方:

我建议使用 REST 作为 API 层来在您的 Symfony 应用程序和 Ratchet 应用程序之间进行通信。因为从你的 Symfony 应用程序使用 Websocket 没有多大意义。 Websockets 用于双向实时通信,而您只需要从 Symfony 应用程序发送一段数据。为此,HTTP REST API 会更方便。 总结一下,在您的 Ratchet 应用程序中,您使用 2 个服务器(Ratchet 允许在单个应用程序中创建任意数量的服务器):web-socket 服务器和 http-server。在您的 Symfony 应用程序中,您将传统的 HTTP 请求发送到您的 Ratchet 服务器。

您可以像这样在单个应用程序中创建多个 Ratchet 服务器:

// 1. Create the event loop
$loop = React\EventLoop\Factory::create();

// 2. Create servers
// websocket
$webSock = new React\Socket\Server($loop);
new Ratchet\Server\IoServer(
    new Ratchet\Http\HttpServer(
        new Ratchet\WebSocket\WsServer( $wsConnectionsHandler )
    ),
    $webSock
);
$webSock->listen($portWS, '0.0.0.0');

// http
$httpSock = new React\Socket\Server($loop);
new Ratchet\Server\IoServer(
    new Ratchet\Http\HttpServer(
        $HTTPConnectionsHandler
    ),
    $httpSock
);
$httpSock->listen($portHTTP, '0.0.0.0');

// 3. Run the loop
$loop->run();

How do I pass the information from the http server to the websocket server?

React/Ratchet 应用程序是一个事件驱动的应用程序,就像典型的 NodeJS 应用程序一样。因此,应用程序组件相互通信的最佳方式是 dispatch/subscribe 事件。例如,您创建 $eventDispatcher 对象,将其传递给每个组件(http-handler 和 ws-handler),然后使用 $eventDispatcher->subscibe(eventName, func)$eventDispatcher->emit(eventName, data) 订阅事件并相应地调度它们。


如果你不服气,那么你需要使用一个Websocket客户端库来连接到Websocket服务器。有几个,就google吧。我个人从未使用过 PHP websocket-client 库,所以我不推荐任何。