Benvenuto nel 2019, dove il dattiloscritto prende lentamente il sopravvento sul mondo. Altre risposte sono ancora perfettamente valide. Tuttavia, volevo solo mostrarti come è possibile configurarlo in un ambiente tipizzato.
Nel caso in cui non l'hai ancora fatto. Si dovrebbe prima installare alcune dipendenze
(cioè dalla linea di comando: 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"
}
Ho definito le importazioni usando le importazioni ES6 (che dovresti prima abilitare nel tuo tsconfig.json
file).
import * as SocketIO from "socket.io";
import * as http from "http";
import * as https from "https";
import * as express from "express";
Poiché uso il dattiloscritto, ora ho la digitazione completa, su tutto ciò che faccio con questi oggetti.
Quindi, ovviamente, prima devi avere un server http:
const handler = express();
const httpServer = (useHttps) ?
https.createServer(serverOptions, handler) :
http.createServer(handler);
Immagino tu abbia già fatto tutto questo. E probabilmente hai già aggiunto socket io ad esso:
const io = SocketIO(httpServer);
httpServer.listen(port, () => console.log("listening") );
io.on('connection', (socket) => onSocketIoConnection(socket));
Successivamente, per la gestione di nuove connessioni socket-io, è possibile inserire il SocketIO.Socket
tipo sul suo parametro.
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(...));
}
E infine, poiché ora abbiamo la digitazione completa, possiamo facilmente recuperare l'ip dal nostro socket, senza indovinare:
const ip = socket.conn.remoteAddress;
console.log(`client ip: ${ip}`);