Добро пожаловать в 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);
Думаю, ты уже все это сделал. И вы, наверное, уже добавили в него socket io:
const io = SocketIO(httpServer);
httpServer.listen(port, () => console.log("listening") );
io.on('connection', (socket) => onSocketIoConnection(socket));
Затем, для обработки новых соединений 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}`);