Bienvenido en 2019, donde el mecanografiado se apodera lentamente del mundo. Otras respuestas siguen siendo perfectamente válidas. Sin embargo, solo quería mostrarle cómo puede configurar esto en un entorno mecanografiado.
En caso de que aún no lo hayas hecho. Primero debe instalar algunas dependencias
(es decir, desde la línea de comandos: 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"
}
Definí las importaciones utilizando las importaciones de ES6 (que tsconfig.json
primero debe habilitar en su archivo).
import * as SocketIO from "socket.io";
import * as http from "http";
import * as https from "https";
import * as express from "express";
Como uso el mecanografiado, ahora tengo una escritura completa, en todo lo que hago con estos objetos.
Entonces, obviamente, primero necesitas un servidor http:
const handler = express();
const httpServer = (useHttps) ?
https.createServer(serverOptions, handler) :
http.createServer(handler);
Supongo que ya hiciste todo eso. Y probablemente ya le haya agregado socket io:
const io = SocketIO(httpServer);
httpServer.listen(port, () => console.log("listening") );
io.on('connection', (socket) => onSocketIoConnection(socket));
Luego, para el manejo de nuevas conexiones socket-io, puede poner el SocketIO.Socket
tipo en su parámetro.
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(...));
}
Y finalmente, porque ahora tenemos una escritura completa, podemos recuperar fácilmente la ip de nuestro socket, sin adivinar:
const ip = socket.conn.remoteAddress;
console.log(`client ip: ${ip}`);