连接到 Azure 虚拟机上的 Node.js 服务器

Connecting to Node.js server on azure virtual machine

我在 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');

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

不知何故,将主机声明为 127.0.0.1 导致了问题。我删除了它并让服务器只监听端口,即 listen(port)。这样做之后,我能够检测到该端口已打开,然后我在远程计算机上的程序就可以与虚拟机进行双向通信了。

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

省略 IP 地址将导致服务侦听主机上任何可用的 IP 地址 - 请参阅 Node.js docs. Note that some hosting providers will require your application to listen on specific IP address in order to be able to serve requests (i.e. Openshift)。