node.js - 在带有 node.js 的 socket.io 中,如何确定特定连接的服务器 IP?

标签 node.js express websocket socket.io

最终,这里的目标是使用 socket.io 处理 DNS 循环,以协调不同的连接(socket.io 和 jQuery ajax),以便当一个名称映射到多个服务器时它们会转到同一台服务器。

使用这段代码,我能够找到传入 websockets 连接的客户端端 IP 地址:

var app = express();
   ...
var server = http.createServer(app);
   ...
var io = socketio.listen(server);
io.on('connection', function(socket) {
  var addr = socket.handshake.address;
  logger.info("Just got incoming connection from client " + addr.address
              + ":" + addr.port);

但是我怎样才能找到这个套接字的服务器端IP地址呢?我想将服务器端 IP 地址发送到客户端(使用 socket.emit('serverSideIp': <server-IP>) ),以便出于诊断目的我们可以跟踪正在使用的特定 IP 地址。此外,当 socket.io 连接失败并转到不同的 IP 时,我想将客户端 AJAX 请求重定向到该 IP,这样客户端就不会在同一时间与不同的服务器通信。

编辑:Get local IP address in node.js不回答我的问题。 回答是“我的 IP 地址列表是什么。”我的问题是,“给定一个特定套接字,该特定套接字的本地地址(IP 和端口)是什么”,无法通过从操作系统获取地址列表在多宿主主机上回答这个问题。在 Java 或 C# 中,获取套接字的本地和远程端口以及 IP 地址是微不足道的。您如何在 node.js 中为 socket.io“套接字”连接执行此操作?

最佳答案

Socket.IO 正在监听 websocket 请求,但它是在 Express 建立的 HTTP 连接上进行的。您可以找到 Express 接受 HTTP 连接的地址,如下所示:

app.get('/', function (req, res) {
    console.log(req.socket.address());

也就是说,在你弄清楚接受地址之前,不要等待 websocket 请求;如果您在 Socket.IO 连接事件期间需要它,您可以将其存储以备后用。

关于node.js - 在带有 node.js 的 socket.io 中,如何确定特定连接的服务器 IP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16245552/

相关文章:

node.js - Heroku/Node.js - 导致内部服务器错误的某种路由错误

javascript - Node.js/Express 异步文件上传

go - 在 golang 中通过 websocket 编写客户端

Nginx入口 Controller Websocket支持

java - @MessageMapping 不适用于 Spring Security 和 MVC

node.js - vue.js 和 vue-multilingual 我的 webpack 编译没有翻译正确

node.js - 使用node-imagemagick将 'crop'图像上传到S3

node.js - 在 JADE 中访问 jQuery 对象

node.js - 收集单个路由调用上的多个函数输出并在 NodeJS 中渲染为 html

javascript - 使用 VueJS、VuelidateJS 和 NodeJS/Express 时的项目结构