Получить IP-адрес клиента в socket.io

При использовании socket.IO на сервере Node.js, есть ли простой способ получить IP-адрес входящее соединение? Я знаю, что вы можете получить его через стандартное HTTP-соединение, но socket.io - это немного другое дело.

127
задан Nic Hartley 4 May 2015 в 15:17
поделиться

2 ответа

Добро пожаловать в 2019, где машинописный текст медленно принимает мир. Другие ответы все еще совершенно действительны. Однако я просто хотел показать Вам, как можно настроить это во введенной среде.

В случае, если Вы еще не имеете. Необходимо сначала установить некоторые зависимости (т.е. от командной строки: npm install <dependency-goes-here> --save-dev)

  "devDependencies": {
    ...
    "@types/express": "^4.17.2",
    ...
    "@types/socket.io": "^2.1.4",
    "@types/socket.io-client": "^1.4.32",
    ...
    "ts-node": "^8.4.1",
    "typescript": "^3.6.4"
  }

я определил импорт с помощью импорта ES6 (который необходимо включить в Вашем tsconfig.json файл сначала.)

import * as SocketIO from "socket.io";
import * as http from "http";
import * as https from "https";
import * as express from "express";

, поскольку я использую машинописный текст, у меня есть полный ввод теперь на всем, я делаю с этими объектами.

Так, очевидно, сначала Вам нужен http сервер:

const handler = express();

const httpServer = (useHttps) ?
  https.createServer(serverOptions, handler) :
  http.createServer(handler);

я предполагаю, что Вы уже сделали все это. И Вы, вероятно, уже добавили сокет io к нему:

const io = SocketIO(httpServer);
httpServer.listen(port, () => console.log("listening") );
io.on('connection', (socket) => onSocketIoConnection(socket));

Затем, для обработки новых соединений сокета-io, можно поместить эти SocketIO.Socket тип на его параметре.

function onSocketIoConnection(socket: SocketIO.Socket) {      
  // I usually create a custom kind of session object here.
  // then I pass this session object to the onMessage and onDisconnect methods.

  socket.on('message', (msg) => onMessage(...));
  socket.once('disconnect', (reason) => onDisconnect(...));
}

И затем наконец, потому что у нас есть полный ввод теперь, мы можем легко получить IP от нашего сокета без предположения:

const ip = socket.conn.remoteAddress;
console.log(`client ip: ${ip}`);
0
ответ дан 24 November 2019 в 00:43
поделиться

В версии v2.3.0

эта работа для меня:

socket.handshake.headers['x-forwarded-for'].split(',')[0]
0
ответ дан 24 November 2019 в 00:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: