raspberry pi 的棘轮 Websocket
Ratchet Websocket for raspberry pi
我用棘轮写了一个websocket。网络服务器是 nginx,位于 raspberry pi 上。 raspberry pi 已通过端口转发通过路由器连接到互联网。当我在工作中访问该站点时,一切正常。 websocket 连接,所有网页启动。当我尝试在工作之外访问该网页时,该网页可以正常工作,但 websocket 除外。最糟糕的是我什至无法调试它,因为我需要在本地网络之外才能使 websocket 失败(即不工作)。在工作中,我可以使用两个IP地址连接到服务器,一个是只能在本地访问的私有IP地址,另一个是可以从任何地方访问的public IP地址。两个 IP 地址都正确启动了 websocket。当我不上班时,我只能访问 Public IP 地址上的网络服务器,而 websocket 不起作用。
我已经连续一天半尝试完成这项工作,但没有成功。有人有什么建议吗?甚至帮我找出问题?
websocket 代码遵循棘轮推送服务器教程:
<?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 和私人 IP 地址都可以使用。
这是对我自己的问题的一个很晚的回答,但以防万一有人仍然对同样的问题感到困惑。答案是不要使用棘轮。将 nodejs 与 socket.io 一起使用。你所有的烦恼都会飞走。 Socket.io 也有一个 java 实现只是一个更发达的 WebSockets 包。
我用棘轮写了一个websocket。网络服务器是 nginx,位于 raspberry pi 上。 raspberry pi 已通过端口转发通过路由器连接到互联网。当我在工作中访问该站点时,一切正常。 websocket 连接,所有网页启动。当我尝试在工作之外访问该网页时,该网页可以正常工作,但 websocket 除外。最糟糕的是我什至无法调试它,因为我需要在本地网络之外才能使 websocket 失败(即不工作)。在工作中,我可以使用两个IP地址连接到服务器,一个是只能在本地访问的私有IP地址,另一个是可以从任何地方访问的public IP地址。两个 IP 地址都正确启动了 websocket。当我不上班时,我只能访问 Public IP 地址上的网络服务器,而 websocket 不起作用。
我已经连续一天半尝试完成这项工作,但没有成功。有人有什么建议吗?甚至帮我找出问题?
websocket 代码遵循棘轮推送服务器教程:
<?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 和私人 IP 地址都可以使用。
这是对我自己的问题的一个很晚的回答,但以防万一有人仍然对同样的问题感到困惑。答案是不要使用棘轮。将 nodejs 与 socket.io 一起使用。你所有的烦恼都会飞走。 Socket.io 也有一个 java 实现只是一个更发达的 WebSockets 包。