无法将客户端连接到 AWS 上的远程套接字
Posted
技术标签:
【中文标题】无法将客户端连接到 AWS 上的远程套接字【英文标题】:Impossible to connect a client to a remote socket on AWS 【发布时间】:2018-11-16 09:34:27 【问题描述】:我遇到了一个新开发者使用 socket.io 的问题
我有一个在 AWS EC2 实例上运行的 socket.io 服务器。它是一个单一实例,在端口 10000 上有一个公共(55.55.55.55)和一个私有 IP 地址(10.0.1.1)
我启动服务器,然后转到我在另一个 VPC (10.5.1.1/16) 和另一个公共 IP 地址 100.100.100.100 中的另一个 EC2 实例上创建的网站
这是我在这个实例上运行的代码,websocket 的客户端(显示一个简单的聊天测试)
<script>
const display_panel = document.getElementById('ws');
const number_of_lines_displayed = document.getElementById('info_lines');
let socket = io('http://55.55.55.55:10000');
let line_counter = 0;
socket.on('test', (msg) =>
if(line_counter < max_lines )
let span = document.createElement('span');
let text = document.createTextNode(msg);
let newline = document.createElement('br');
span.appendChild(text);
display_panel.insertBefore(newline, display_panel.firstChild);
display_panel.insertBefore(span, display_panel.firstChild);
number_of_lines_displayed.innerhtml = 'line(s): ' + line_counter++;
);
</script>
然后,我遇到了连接超时。
在服务器端,我已经启动服务器尝试所有可能的解决方案,但在所有情况下我都无法连接
10.0.1.1:10000 127.0.0.1:10000 0.0.0.0:10000 55.55.55.55:10000在最后一种情况下,服务器给我这个错误
Bugsnag: Encountered an uncaught error, terminating…
1|test | Error: listen EADDRNOTAVAIL 55.55.55.55:10000
1|test | at Object._errnoException (util.js:992:11)
1|test | at _exceptionWithHostPort (util.js:1014:20)
1|test | at Server.setupListenHandle [as _listen2] (net.js:1338:19)
1|test | at listenInCluster (net.js:1396:12)
1|test | at doListen (net.js:1505:7)
1|test | at _combinedTickCallback (internal/process/next_tick.js:141:11)
1|test | at process._tickDomainCallback (internal/process/next_tick.js:218:9)
1|test | at Function.Module.runMain (module.js:695:11)
1|test | at startup (bootstrap_node.js:191:16)
1|test | at bootstrap_node.js:612:3
我不知道如何才能使这件事发挥作用。当我试图访问公共 IP 时,我不应该需要 VPC 之间的桥梁(这将是我最喜欢的解决方案)
Netstat 在所有情况下都给我这个
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 10.0.1.1:10000 0.0.0.0:* LISTEN 18132/test.js
在本地环境下一切正常,所以代码不是问题,主要是网络问题。
感谢您的帮助!
【问题讨论】:
【参考方案1】:发现问题:我们需要在 EC2 实例上的 AWS 控制台中打开端口。
实例>安全组>入站规则
【讨论】:
以上是关于无法将客户端连接到 AWS 上的远程套接字的主要内容,如果未能解决你的问题,请参考以下文章
phpMyAdmin 无法从 Linux 客户端连接到 Windows 7 上的远程服务器