Daktilo yazısının yavaş yavaş dünyayı ele geçirdiği 2019'a hoş geldiniz. Diğer cevaplar hala tamamen geçerlidir. Ancak, bunu yazılı bir ortamda nasıl kurabileceğinizi size göstermek istedim.
Henüz yapmadıysanız. Önce bazı bağımlılıkları yüklemek gerekir
(komut ile yani: 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"
}
İçe aktarımları ES6 içe aktarımlarını kullanarak tanımladım ( tsconfig.json
önce dosyanızda etkinleştirmeniz gerekir .)
import * as SocketIO from "socket.io";
import * as http from "http";
import * as https from "https";
import * as express from "express";
Daktilo kullandığım için şu anda bu nesnelerle yaptığım her şeyde tam yazı yazıyorum.
Yani, açıkçası, önce bir http sunucusuna ihtiyacınız var:
const handler = express();
const httpServer = (useHttps) ?
https.createServer(serverOptions, handler) :
http.createServer(handler);
Sanırım hepsini zaten yaptın. Ve muhtemelen zaten ona soket io eklediniz:
const io = SocketIO(httpServer);
httpServer.listen(port, () => console.log("listening") );
io.on('connection', (socket) => onSocketIoConnection(socket));
Daha sonra, yeni soket-io bağlantılarının işlenmesi için, SocketIO.Socket
türü parametresine koyabilirsiniz .
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(...));
}
Ve son olarak, artık tam yazı yazabildiğimiz için, ip'i tahmin etmeden soketimizden kolayca alabiliriz:
const ip = socket.conn.remoteAddress;
console.log(`client ip: ${ip}`);