无法连接到Websocket

7
我使用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时,都会出现错误。

WebSocket连接到 'wss://10.0.4.160:58443/' 失败:连接建立时出错: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?谢谢。


直到我们看到您使用Ratchet设置的PHP服务器,否则将会被投下反对票。 - THE AMAZING
1个回答

1

http://www.html5rocks.com/en/tutorials/websockets/basics/上阅读更多关于HTML5 WebSockets的内容。

Socket.io是一个流行的Web Socket库,在www.socket.io上阅读更多内容。

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

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

如果您的服务器可以识别连接尝试,则很可能是握手出现了问题。您的JavaScript没有任何问题。


额外信息:

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

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

你正在使用的是:(我们将称之为类型2)
|BROWSER(client)| <----CONNECTION --> |SERVER(websocket)|

当使用类型1连接作为类型2连接时,您可能会冒着使主Web服务器溢出的风险,从而导致严重的性能问题。像Godaddy、Hostgator等Web主机将终止那些被视为DDOS攻击的连接,因为它们会淹没他们的服务器。

我不知道什么是Ratchet,但为了保持服务器和客户端的连接开放,PHP需要保持开放状态,这永远永远永远不是一个好主意。请考虑使用C#或C++等语言创建服务器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接