Bienvenue en 2019, où la dactylographie envahit lentement le monde. D'autres réponses sont toujours parfaitement valables. Cependant, je voulais juste vous montrer comment configurer cela dans un environnement typé.
Au cas où vous ne l'auriez pas encore fait. Vous devez d' abord installer quelques dépendances
( par exemple à partir de la ligne de commande: 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"
}
J'ai défini les importations à l'aide des importations ES6 (que vous devez d'abord activer dans votre tsconfig.json
fichier.)
import * as SocketIO from "socket.io";
import * as http from "http";
import * as https from "https";
import * as express from "express";
Parce que j'utilise dactylographié, j'ai maintenant une saisie complète, sur tout ce que je fais avec ces objets.
Donc, évidemment, vous avez d'abord besoin d'un serveur http:
const handler = express();
const httpServer = (useHttps) ?
https.createServer(serverOptions, handler) :
http.createServer(handler);
Je suppose que vous avez déjà fait tout cela. Et vous y avez probablement déjà ajouté socket io:
const io = SocketIO(httpServer);
httpServer.listen(port, () => console.log("listening") );
io.on('connection', (socket) => onSocketIoConnection(socket));
Ensuite, pour la gestion des nouvelles connexions socket-io, vous pouvez mettre le SocketIO.Socket
type sur son paramètre.
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(...));
}
Et puis enfin, comme nous avons maintenant une saisie complète, nous pouvons facilement récupérer l'ip de notre socket, sans deviner:
const ip = socket.conn.remoteAddress;
console.log(`client ip: ${ip}`);