Ласкаво просимо у 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}`);