Php Ratchet:如何在同一台服务器上同时使用聊天和推送通知

Php Ratchet:如何在同一台服务器上同时使用聊天和推送通知,php,websocket,Php,Websocket,我想在同一台服务器上使用ratchet()教程中的“聊天”和“推送通知”应用程序 -“你好,世界”() -与ZMQ的“推式集成”。 每个应用程序都运行得很好,我运行chat-server.php(用于聊天)和push-server.php(用于推送集成)。但是当我打开两个cmd窗口并同时运行这两个应用程序时,它都不起作用。这可能是一个愚蠢的问题,但我在这个领域是初学者 在下面找到两个可执行文件的代码 chat-server.php: require dirname(__DIR__) . '/v

我想在同一台服务器上使用ratchet()教程中的“聊天”和“推送通知”应用程序 -“你好,世界”() -与ZMQ的“推式集成”。
每个应用程序都运行得很好,我运行chat-server.php(用于聊天)和push-server.php(用于推送集成)。但是当我打开两个cmd窗口并同时运行这两个应用程序时,它都不起作用。这可能是一个愚蠢的问题,但我在这个领域是初学者

在下面找到两个可执行文件的代码


chat-server.php:

require dirname(__DIR__) . '/vendor/autoload.php';

$loop   = React\EventLoop\Factory::create();
$pusher = new MyApp\Pusher;

// Listen for the web server to make a ZeroMQ push after an ajax request
$context = new React\ZMQ\Context($loop);
$pull = $context->getSocket(ZMQ::SOCKET_PULL);
$pull->bind('tcp://127.0.0.1:5555'); // Binding to 127.0.0.1 means the only client that can connect is itself
$pull->on('message', array($pusher, 'onBlogEntry'));

// Set up our WebSocket server for clients wanting real-time updates
$webSock = new React\Socket\Server($loop);
$webSock->listen(8080, '0.0.0.0'); // Binding to 0.0.0.0 means remotes can connect
$webServer = new Ratchet\Server\IoServer(
    new Ratchet\Http\HttpServer(
        new Ratchet\WebSocket\WsServer(
            new Ratchet\Wamp\WampServer(
                $pusher
            )
        )
    ),
    $webSock
);

$loop->run();
使用Ratchet\Server\IoServer; 使用MyApp\Chat

require dirname(__DIR__) . '/vendor/autoload.php';

$server = IoServer::factory(
    new Chat(),
    8080
);

$server->run();

push-server.php:

require dirname(__DIR__) . '/vendor/autoload.php';

$loop   = React\EventLoop\Factory::create();
$pusher = new MyApp\Pusher;

// Listen for the web server to make a ZeroMQ push after an ajax request
$context = new React\ZMQ\Context($loop);
$pull = $context->getSocket(ZMQ::SOCKET_PULL);
$pull->bind('tcp://127.0.0.1:5555'); // Binding to 127.0.0.1 means the only client that can connect is itself
$pull->on('message', array($pusher, 'onBlogEntry'));

// Set up our WebSocket server for clients wanting real-time updates
$webSock = new React\Socket\Server($loop);
$webSock->listen(8080, '0.0.0.0'); // Binding to 0.0.0.0 means remotes can connect
$webServer = new Ratchet\Server\IoServer(
    new Ratchet\Http\HttpServer(
        new Ratchet\WebSocket\WsServer(
            new Ratchet\Wamp\WampServer(
                $pusher
            )
        )
    ),
    $webSock
);

$loop->run();


提前感谢您的帮助。如果您需要更多信息,请告诉我。您可以使用单独的文件,聊天服务器.php推送服务器.php,但是您不能从两个不同的文件监听同一端口。您必须更改其中一个。您可以将推送服务器.php的端口保留为
8080
并将聊天服务器.php的端口更改为
3000
(例如):

使用Ratchet\Server\IoServer;使用MyApp\Chat;
需要dirname(_DIR__)。'/vendor/autoload.php';
$server=IoServer::工厂(
新建聊天室(),
3000
);
$server->run();

如果您想使用一个服务器文件,它非常简单,您只需在chat server.phppush server.php中添加一行即可(我在其旁边写了一条注释)。因此,您的最终文件如下所示:

require dirname(_DIR__)。'/vendor/autoload.php';
$loop=React\EventLoop\Factory::create();
$pusher=新的MyApp\pusher;
//侦听web服务器在ajax请求后进行ZeroMQ推送
$context=newreact\ZMQ\context($loop);
$pull=$context->getSocket(ZMQ::SOCKET\u pull);
$pull->bind($pull)tcp://127.0.0.1:5555“);//绑定到127.0.0.1意味着唯一可以连接的客户端是它自己
$pull->on('message',数组($pusher,'onBlogEntry');
//为需要实时更新的客户端设置我们的WebSocket服务器
$webSock=newreact\Socket\Server($loop);
$webSock->listen(8080,'0.0.0');//绑定到0.0.0.0意味着远程设备可以连接
$webServer=新棘轮\Server\IoServer(
新棘轮\Http\HttpServer(
新建Ratchet\WebSocket\WsServer(
新建MyApp\Chat(),//这是添加的行
新棘轮\Wamp\WampServer(
$pusher
)
)
),
$webSock
);
$loop->run();
不要从server.php添加任何其他内容,例如
use…;

确保您有单独的文件/src/MyApp/Chat.php/src/MyApp/Pusher.php,分别包含类
Chat
Pusher

现在,当您运行时:

$ php push-server.php

它将执行server.php所执行的任务。

尝试将一台服务器更改为另一个端口,如8081。您好,有解决方案吗?