树莓派的 Ratchet Websocket

Posted

技术标签:

【中文标题】树莓派的 Ratchet Websocket【英文标题】:Ratchet Websocket for raspberry pi 【发布时间】:2016-07-21 19:26:03 【问题描述】:

我已经使用棘轮编写了一个 websocket。网络服务器是 nginx 并且存在于树莓派上。树莓派已经通过端口转发通过路由器连接到互联网。当我在工作中访问该网站时,一切正常。 websocket 连接,所有网页启动。当我尝试在工作之外访问网页时,网页除了 websocket 之外都可以工作。最糟糕的是我什至无法调试它,因为我需要在本地网络之外才能使 websocket 失败(即不工作)。在工作中,我可以使用两个 IP 地址连接到服务器,一个只能在本地访问的私有 IP 地址,一个可以从任何地方访问的公共 IP 地址。两个 IP 地址都正确启动了 websocket。不上班的时候,只能访问Public IP上的webserver,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
    );

我怀疑问题出在安全设置上,因为当我在工作地点时,公共 IP 地址和私有 IP 地址都有效。

【问题讨论】:

这个var conn = new ab.Session('ws://privateIPAddress:443', 必须是你的publicIPAddress 如果我用我的公共 IP 地址替换该行,无论我在本地网络还是公共网络@cmorrissey,浏览器都无法连接到网络服务器 这似乎是一个合理的解决方案,但随后出现了其他问题。 你说得对,这就是问题的一部分。但是现在如何让 websocket 使用公共 IP 地址呢? 也许尝试将 $webSock-&gt;listen(443, '0.0.0.0'); 更改为 $webSock-&gt;listen(443); 【参考方案1】:

这是对我自己的问题的一个非常晚的答案,但以防有人仍然对同样的问题感到困惑。答案是不要使用棘轮。将 nodejs 与 socket.io 一起使用。你所有的烦恼都会飞走。同样具有 java 实现的 Socket.io 只是 WebSockets 的一个更发达的包。

【讨论】:

以上是关于树莓派的 Ratchet Websocket的主要内容,如果未能解决你的问题,请参考以下文章

树莓派树莓派的启动与SSH连接

使用Android手机作为树莓派的屏幕

关闭树莓派的指示灯

上手树莓派第一步(树莓派的初始化)

树莓派在树莓派的Android系统中安装APK应用

树莓派的输入声音检测