与'ws://mydomain.com:8084 /?peer_id = 123'的WebSocket连接失败:连接建立错误:net :: ERR_CONNECTION_TIMED_OUT

时间:2015-08-07 08:36:08

标签: php websocket socket.io

var ws = new WebSocket('ws://' + server); //server is mydomain.com:8084?peer_id=123
            console.log('ws://' + server);

            //var self = this;
            ws.onopen = function () {
                console.log("Opening a connection...");
            };
            ws.onclose = function (evt) {

                is_connected = false;
                console.log("Could not listen to the server. The connection is closing");
            };

            ws.onerror = function (evt) {
                console.log("ERR: " + evt.data);
            };

以上是从客户端连接套接字服务器的代码。

在服务器上,我使用PHP WebSocket来设置在后台运行的套接字服务器

$server = IoServer::factory(
            new HttpServer(
                new WsServer(
                    new RatchetGlobalServer()
                )
            ),
            8084
        );

        $server->run();

首先,它在我的localhost上运行良好,我已经将它部署到我的主机,它也可以。但是,当我切换到另一个ISP时,它不起作用,onOpen事件不会触发,它会抛出错误并最终进入onclose。

在我的国家,有四家大型ISP提供商:A,B,C,D

我尝试使用来自其他ISP(B,C,D)的其他互联网线路,它完全不起作用,但它确实可以在我的家庭互联网线路上运行(来自ISP A)。我必须强调服务器已经位于专用服务器上,它不再位于我的本地主机上。 我的同事可以访问我的网站,看它工作正常(他们使用的是网络和路由器)

关于我的路由器上的配置是否只是让事情有效?我不知道发生了什么。我试图找出它好几天了。

关闭事件伴随着代码1006带有空的原因:

CloseEvent {}
bubbles: false
cancelBubble: false
cancelable: false
code: 1006
currentTarget: WebSocketdefaultPrevented: false
eventPhase: 0
path: Array[0]
reason: ""returnValue: true
srcElement: WebSockettarget: WebSockettimeStamp: 1438951964550
type: "close"
wasClean: false
__proto__: CloseEvent

错误与此问题的标题相同。

有一个人遇到了类似我的问题。 Websocket Server, based on socketo.me not accepting connections from shared internet

1 个答案:

答案 0 :(得分:4)

问题是我使用的端口是8082和8083突然被客户端浏览器阻止。超时错误完全反映了连接到我的Web套接字服务器失败的结果,这些端口不是80(HTTP)或443(SSL)。原因可能是防火墙, Antiviruses,或任何HTTP代理问题。

实际上有许多人都会注意到这个问题。 最后,我必须找到配置我的服务器以将端口80的请求转换为两个不同端口的方式:8080(我的Apache)& 8083(websocket)。

对我来说工作的解决方法也在Ratchet的官方网站上 HAProxy