php - 用于树莓派的 Ratchet Websocket

标签 php security nginx websocket ratchet

我已经使用 Ratchet 编写了一个 websocket。网络服务器是 nginx 并运行在树莓派上。树莓派已经通过端口转发通过路由器连接到互联网。当我在工作中访问该站点时,一切正常。 websocket 连接,所有网页启动。当我尝试在工作之外访问网页时,除了 websocket 之外,该网页可以正常工作。最糟糕的是我什至无法调试它,因为我需要在本地网络之外才能使 websocket 失败(即不工作)。在工作中,我可以使用两个IP地址连接到服务器,一个只能在本地访问的私有(private)IP地址和一个可以从任何地方访问的公共(public)IP地址。两个 IP 地址都正确启动了 websocket。当我不工作时,我只能访问公共(public) IP 地址上的网络服务器,而 websocket 不起作用。

我一直在尝试使这项工作连续一天半,但没有成功。有人有什么建议吗?竟然帮我找出问题?

websocket 代码遵循 Ratchet Push Server 教程:

    <?php
       require '/var/www/html/vendor/autoload.php';

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

       $context = new React\ZMQ\Context($loop);
       $pull->bind('tcp://127.0.0.1:5555');
       $pull->on('message',array($pusher, 'onBlogEntry'));

       $webSock = new React\Socket\Server($loop);
       $webSock->listen(443, '0.0.0.0');
       $webServer = new Ratchet\Server\IoServer(
           new Ratchet\Http\HttpServer(
               new Ratchet\Websocket\WsServer(
                   new Ratchet\Wamp\WampServer(
                       $pusher
                   )
               )
           ),
           $webSock
       );
       $loop->run();
    ?>

客户端代码是:
    var conn = new ab.Session('ws://privateIPAddress:443',
        function (){
            console.log("Here");
            conn.subscribe('client',function(topic,data) {
                console.log("hey");
                ...
            });
        },
        function() {
            console.warn('Websocket connection closed');
        },
        {'skipSubprotocolCheck': true}
    );

我怀疑问题是安全设置,因为当我在工作现场时,公共(public)和私有(private) IP 地址都可以工作。

最佳答案

这是对我自己的问题的一个很晚的答案,但以防万一有人仍然对相同的问题感到困惑。答案是不要使用 Ratchet 。将 nodejs 与 socket.io 一起使用。你所有的烦恼都会烟消云散。 Socket.io 也有一个 java 实现,只是一个更发达的 WebSockets 包。

关于php - 用于树莓派的 Ratchet Websocket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38512769/

相关文章:

php - PDO:查找值并返回相似值的数组

php - 创建不压缩的 ZIP 存档?

php - 包含月份和年份的排序字符串 - 'may - 2016'

python - Flask 应用程序在通过 nginx 代理时提供无处不在的 404

php - 基于引用表值连接表

asp.net - 这是哪种易受攻击的扫描?

django - 使用 root 权限运行 Django API 服务器可以吗?

c# - 当项目开源时,谁应该拥有用于签署 .NET 程序集的私钥?

php - NGINX + phpFPM 负载均衡器和 session

php - Github 身份验证失败,用户 www-data