Bem-vindo em 2019, onde o texto datilografado domina lentamente o mundo. Outras respostas ainda são perfeitamente válidas. No entanto, eu só queria mostrar como você pode configurar isso em um ambiente digitado.
Caso você ainda não tenha. Você deve primeiro instalar algumas dependências
(ou seja, a partir da linha de 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"
}
Eu defini as importações usando as importações do ES6 (que você deve ativar tsconfig.json
primeiro no seu arquivo.)
import * as SocketIO from "socket.io";
import * as http from "http";
import * as https from "https";
import * as express from "express";
Como uso o texto datilografado, agora tenho digitação completa, em tudo o que faço com esses objetos.
Então, obviamente, primeiro você precisa de um servidor http:
const handler = express();
const httpServer = (useHttps) ?
https.createServer(serverOptions, handler) :
http.createServer(handler);
Eu acho que você já fez tudo isso. E você provavelmente já adicionou o soquete io a ele:
const io = SocketIO(httpServer);
httpServer.listen(port, () => console.log("listening") );
io.on('connection', (socket) => onSocketIoConnection(socket));
Em seguida, para o tratamento de novas conexões socket-io, você pode colocar o SocketIO.Socket
tipo em seu parâmetro.
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 finalmente, como temos digitação completa agora, podemos recuperar facilmente o ip do soquete, sem adivinhar:
const ip = socket.conn.remoteAddress;
console.log(`client ip: ${ip}`);