Selamat datang di 2019, di mana naskah perlahan mulai menguasai dunia. Jawaban lain masih sangat valid. Namun, saya hanya ingin menunjukkan kepada Anda bagaimana Anda dapat mengatur ini di lingkungan yang diketik.
Jika Anda belum. Pertama Anda harus menginstal beberapa dependensi
(yaitu dari commandline: 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"
}
Saya mendefinisikan impor menggunakan impor ES6 (yang harus Anda aktifkan dalam tsconfig.json
file Anda terlebih dahulu.)
import * as SocketIO from "socket.io";
import * as http from "http";
import * as https from "https";
import * as express from "express";
Karena saya menggunakan naskah saya sudah mengetik penuh sekarang, pada semua yang saya lakukan dengan objek-objek ini.
Jadi, jelas, pertama Anda memerlukan server http:
const handler = express();
const httpServer = (useHttps) ?
https.createServer(serverOptions, handler) :
http.createServer(handler);
Saya kira Anda sudah melakukan semua itu. Dan Anda mungkin sudah menambahkan socket io ke dalamnya:
const io = SocketIO(httpServer);
httpServer.listen(port, () => console.log("listening") );
io.on('connection', (socket) => onSocketIoConnection(socket));
Selanjutnya, untuk penanganan koneksi socket-io baru, Anda dapat meletakkan SocketIO.Socket
tipe pada parameternya.
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(...));
}
Dan akhirnya, karena kita memiliki pengetikan penuh sekarang, kita dapat dengan mudah mengambil ip dari soket kita, tanpa menebak:
const ip = socket.conn.remoteAddress;
console.log(`client ip: ${ip}`);