Willkommen im Jahr 2019, wo Typoskript langsam die Welt erobert. Andere Antworten sind immer noch vollkommen gültig. Ich wollte Ihnen jedoch nur zeigen, wie Sie dies in einer typisierten Umgebung einrichten können.
Falls Sie es noch nicht getan haben. Sie sollten zunächst einige Abhängigkeiten installieren
(dh von der Kommandozeile: 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"
}
Ich habe die Importe mithilfe von ES6-Importen definiert (die Sie zuerst in Ihrer tsconfig.json
Datei aktivieren sollten .)
import * as SocketIO from "socket.io";
import * as http from "http";
import * as https from "https";
import * as express from "express";
Da ich Typoskript verwende, kann ich jetzt alles, was ich mit diesen Objekten mache, vollständig eingeben.
Natürlich benötigen Sie zuerst einen http-Server:
const handler = express();
const httpServer = (useHttps) ?
https.createServer(serverOptions, handler) :
http.createServer(handler);
Ich denke du hast das alles schon getan. Und Sie haben wahrscheinlich bereits Socket Io hinzugefügt:
const io = SocketIO(httpServer);
httpServer.listen(port, () => console.log("listening") );
io.on('connection', (socket) => onSocketIoConnection(socket));
Als Nächstes können Sie für die Behandlung neuer Socket-Io-Verbindungen den SocketIO.Socket
Typ in seinen Parameter einfügen.
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(...));
}
Und schließlich können wir, da wir jetzt vollständig tippen, die IP-Adresse problemlos aus unserem Socket abrufen, ohne zu raten:
const ip = socket.conn.remoteAddress;
console.log(`client ip: ${ip}`);