我尝试使用套接字连接到我的服务器。我的服务器正在端口8080上运行带有Rachet的服务器套接字。我尝试运行以下代码:
<script>
try{
conn = new WebSocket('wss://localhost:8080');
conn.onclose = function (e)
{
//checkUser();
}
conn.onopen = function(e)
{
console.log("test");
};
}catch (error)
{
console.log(error);
}
</script>
但我得到这个错误:
WebSocket connection to 'wss://localhost:8080/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED
当我尝试从我的linux shell连接时,我得到这个:
root@(none):~# telnet localhost 8080
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
6条答案
按热度按时间bq8i3lrv1#
CONNECTION_REFUSED在端口关闭时是标准的,但它可能会被拒绝,因为SSL无法通过身份验证(十亿个原因之一)。您是否使用Ratchet配置了SSL?(绕过Apache)您是否尝试在JavaScript中不使用SSL?
我不认为Ratchet有内置的SSL支持,但即使它有,你也要先试试ws://协议;它更简单,更容易调试,更接近telnet。如果服务不支持SSL(因为您明确请求了SSL),Chrome或套接字服务也可能生成REFUSED错误。
然而,被拒绝的消息可能是服务器端的问题(通常端口关闭)。
dgiusagp2#
首先,我会尝试一个不安全的WebSocket连接,所以从连接地址中删除一个
s
:如果这不起作用,那么接下来我会检查你的服务器的防火墙设置,你需要打开
TCP_IN
和TCP_OUT
中的8080
端口。kpbwa7wx3#
在我的例子中,答案非常简单。请仔细检查硬编码的url端口:它是8080。由于某种原因,该值已更改为:例如3030。
只需将 AJAX url字符串中的端口刷新为适当的端口即可。
zour9fqk4#
我遇到了同样的问题-客户端脚本在Windows 10上的浏览器中运行,WebSocket服务器在WSL 2上运行(nodejs应用程序使用WebSocketServer package)。
只有
localhost
或IPv6 localhost[::1]
变体(当使用localhost
时,浏览器最终将解析到该变体)实际上将正确连接到WSL 2,从而连接到nodejs WebSocket服务器应用程序。IPv4127.0.0.1
localhost在这种情况下将不工作(Connection refused
)。您可以在浏览器(Chrome)中检查自己:当你请求一个WebSocket地址时,许多实现会用
Upgrade Required
来响应。ff29svar5#
也许你忘了启动WebSocket服务器,再次检查,在我的项目中配置,运行:
php artisan websocket:init
nszi6y056#
您可以使用
npm i y-websockets-server
,然后使用以下命令在这里,端口号是11000。