【问题标题】:Unable to connect to a websocket无法连接到 websocket
【发布时间】:2015-11-10 11:52:02
【问题描述】:

我使用Ratchet 创建了一个 PHP websocket。此 Websocket 正在我的内部服务器 10.0.4.160 的端口 8080 上运行。

我正在尝试从启用了 SSL“又名使用 https 协议”的网站连接到它。

当尝试从 FireFox 浏览器连接到 websocket 时,我从浏览器中遇到安全问题,因为我在安全/非安全连接之间混合。这是我在 javascript 控制台中看到的错误。

SecurityError: 操作不安全。

为了解决安全问题,我创建了一个stunnel 代理,它允许我接受10.0.4.160:58443 上的连接并将其连接到端口127.0.0.1:8080。这个安全隧道应该允许我保持与 websocket 的连接安全并绕过浏览器的安全检查。

但是,每次我尝试连接到 websocket 时都会出错

到“wss://10.0.4.160:58443/”的 WebSocket 连接失败:错误 连接建立:net::ERR_TIMED_OUT

这是用于连接 websocket 的 jQuery 脚本

<script>

    $(function(){
        if ("WebSocket" in window)
        {
            var conn = new WebSocket('wss://10.0.4.160:58443');

            conn.onopen = function(e) {
                console.log("Connection established!");
                showMessage('Connected', 0);
            };

            conn.onmessage = function(e) {
                console.log(e.data);
                showMessage(e.data, 1);
            };

            conn.onclose = function(e) {
                console.log(e.code);
                console.log(e.reason);
            };              

            conn.onerror = function(e) {
                console.log(e);
            };      

        } else {
            console.log('Your browser does not support Websocket!');
        }

        function showMessage(msg, append){
            if(append){
                $('#status').append('<br>' + msg);
                return;
            }

            $('#status').text(msg);
        }
    });

</script>

这是我当前的 stunnel 配置

[websockets]
client = yes
accept = 58443
connect = 8080
verify = 2
CAfile = ca-certs.pem
debug = 7
OCSPaia = yes

如何从浏览器连接到 websocket? 谢谢

【问题讨论】:

  • 在我们看到您的 PHP 服务器设置了棘轮之前投了反对票

标签: javascript jquery ssl websocket stunnel


【解决方案1】:

http://www.html5rocks.com/en/tutorials/websockets/basics/阅读有关 html5 websockets 的更多信息

Socket.io 是一个流行的 Web 套接字库,请访问 www.socket.io 阅读更多信息

没有足够的信息来诊断您的问题。请提供服务器日志。

  • 您的服务器是否识别连接尝试?
  • 您的服务器是否 处理客户端服务器握手?

如果您的服务器识别出连接尝试,那么您的问题很可能是握手。您的 JavaScript 没有问题。


额外信息:

另一种连接类型:(我们将这种类型称为1)

|SERVER(PHP)| <--- CONNECTION --> |SERVER(websocket)|

您正在使用什么:(我们将这种类型称为 2)

|BROWSER(client)| <----CONNECTION --> |SERVER(websocket)|

当使用 type 1 连接作为 type 2 连接时,您可能会导致主 Web 服务器溢出,从而导致严重的性能问题。 Web 主机,例如:Godaddy、Hostgator.. 等等.. 将终止充斥其服务器的连接,因为它们被视为 DDOS 攻击。

我不知道棘轮是什么,但要保持服务器和客户端连接打开,PHP 需要保持打开状态,这绝不是一个好主意。查看用 C# 或 C++ 等语言创建的服务器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-22
    • 2019-06-12
    • 2021-09-12
    • 1970-01-01
    相关资源
    最近更新 更多