我有一个完全正常工作的生产服务器,具有以下设置: NodeJS在端口3000上配置了Nginx和SSL。ExpressJS作为前端。
现在我想在里面添加一些套接字工作。 我使用以下代码创建了一个名为server.js的新文件:
var net = require('net');
var HOST = '127.0.0.1';
var PORT = 6969;
net.createServer(function(sock) {
// We have a connection - a socket object is assigned to the connection automatically
console.log('CONNECTED: ' + sock.remoteAddress +':'+ sock.remotePort);
// Add a 'data' event handler to this instance of socket
sock.on('data', function(data) {
console.log('DATA ' + sock.remoteAddress + ': ' + data);
// Write the data back to the socket, the client will receive it as data from the server
sock.write('You said "' + data + '"');
});
// Add a 'close' event handler to this instance of socket
sock.on('close', function(data) {
console.log('CLOSED: ' + sock.remoteAddress +' '+ sock.remotePort);
});
sock.on('error', function(err) {
console.log(err)
})
}).listen(PORT, HOST);
console.log('Server listening on ' + HOST +':'+ PORT);
我在主app.js文件中添加了这一行:
require('./app/server');
现在,当我启动服务器时,它会按预期打印行: “侦听127.0.0.1:6969的套接字服务器” 和 “NodeJS Production服务器侦听端口3000”
现在,当我尝试使用以下命令到达套接字服务器时
netcat [destination] 6969
它不起作用。 但是当我在我的localhost开发服务器上尝试它时,它没有SSL和Nginx它确实有效。
我可能需要添加一些Nginx配置或安全连接来查看套接字,但我无法在线找到任何线索。
请提供任何帮助!
答案 0 :(得分:0)
普通TCP套接字实际上不需要Nginx来操作。它们也没有加密,因此不使用SSL。您的代码在生产中不起作用但在本地工作的最可能原因是您监听环回接口127.0.0.1
。此接口绝不连接到外部网络,您无法从外部访问它。
您应该监听分配给服务器上特定接口的IP,还是0.0.0.0
,这实际上意味着“监听机器的所有接口”。