【问题标题】:Connecting to Node.js server on azure virtual machine连接到 Azure 虚拟机上的 Node.js 服务器
【发布时间】:2015-04-27 09:24:46
【问题描述】:

我在 Azure 上创建了一个虚拟机并定义了一个 TCP 端点。然后我创建了一个 Node.js TCP 服务器,如下所示:

var net = require('net');
var host = '127.0.0.1';
var port = 8000;
var times = 1;

net.createServer(function (socket) {
console.log('CONNECTED: ' + socket.remoteAddress + ':' + socket.remotePort);

socket.on('data', function (msg) {
    console.log("Message received is: " + msg);
    if (times == 1)
        socket.write("Server says HI");
    times++;
    executeStatement();
});

socket.on('close', function (data) {
    console.log('CLOSED: ' + socket.remoteAddress + ' ' + socket.remotePort);
});
}).listen(port, host);

console.log('System waiting at http://localhost:8000');

我能够在同一台主机上连接到服务器,因此同一台机器上不同端口上的两个应用程序可以双向通信。当我尝试通过公共 IP 地址和端口号连接到虚拟机时,它失败了。我尝试在虚拟机上为专用端口(8000)添加入站防火墙规则,但这也没有什么不同。拜托,谁能给我一些想法和/或链接来帮助解决这个问题。

【问题讨论】:

  • 您是否创建了一个端点,将一些公共端口(例如 8000)映射到内部端口 8000?
  • 嗨,大卫。是的,我做到了。我设法解决了这个问题。将立即发布答案。

标签: node.js azure virtual-machine tcpserver


【解决方案1】:

不知何故,将主机声明为 127.0.0.1 导致了问题。我删除了它并让服务器只监听端口,即监听(端口)。完成此操作后,我能够检测到端口已打开,然后远程计算机上的程序能够与虚拟机进行双向通信。

【讨论】:

    【解决方案2】:

    当您将 HTTP 服务器绑定到地址 127.0.0.1 时,您仅在 local loopback interface 上侦听传入请求。这意味着来自其他设备的任何请求,即使在同一网络上,也将无法访问您的服务。

    省略 IP 地址将导致服务侦听主机上任何可用的 IP 地址 - 请参阅Node.js docs。请注意,某些托管服务提供商会要求您的应用程序监听特定的 IP 地址,以便能够处理请求(即Openshift)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-10
      • 2017-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多