我正在运行棘轮websocket服务器。由于一些复杂的情况,我需要能够通过我的PHP服务器实时与Javascript交谈这个websocket服务器,以便能够发送信息,然后将其传递给任何连接到的客户端。它
我做了一些关于stackoverflow的事情但是一切都是关于如何用PHP 创建一个websocket服务器,这不是我正在寻找的。 strong>
下面是我想要实现的目标。
这里的关键是如何使用PHP连接到棘轮等Websocket服务器?
我尝试/考虑过的事情:
我考虑过使用序列化方法。这将在数据库中序列化并反序列化。我不确定这是否比这种方法更好,请告知。
这是我开始的地方:Ratchet Store Connection of User & Send Message Outside of Server Instance
答案 0 :(得分:1)
我建议使用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();
如何将信息从http服务器传递到websocket服务器?
React / Ratchet应用程序是一个事件驱动的应用程序,就像一个典型的NodeJS应用程序。因此,应用程序组件之间相互通信的最佳方式是分派/订阅事件。例如,您创建$eventDispatcher
对象,将其传递给每个组件(http-handler& ws-handler),然后使用$eventDispatcher->subscibe(eventName, func)
和$eventDispatcher->emit(eventName, data)
订阅事件并相应地调度它们
如果您不相信,那么您需要使用Websocket Client库连接到Websocket服务器。其中有一些,只是google它。我个人从未使用PHP websocket-client库,所以我不推荐任何。