欢迎来到 2019 年,打字稿慢慢占领了世界。
其他答案仍然完全有效。
但是,我只是想向您展示如何在类型化环境中进行设置。
如果你还没有。您应该首先安装一些依赖项
(即从命令行: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"
}
我使用 ES6 导入定义了导入(您应该首先在 tsconfig.json 文件中启用它。)
import * as SocketIO from "socket.io";
import * as http from "http";
import * as https from "https";
import * as express from "express";
因为我使用打字稿,所以我现在可以完全打字了,
关于我对这些对象所做的一切。
所以,显然,首先你需要一个 http 服务器:
const handler = express();
const httpServer = (useHttps) ?
https.createServer(serverOptions, handler) :
http.createServer(handler);
我猜你已经做到了。
而且您可能已经向其中添加了套接字 io:
const io = SocketIO(httpServer);
httpServer.listen(port, () => console.log("listening") );
io.on('connection', (socket) => onSocketIoConnection(socket));
接下来,为了处理新的 socket-io 连接,
您可以将SocketIO.Socket 类型放在其参数上。
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(...));
}
最后,因为我们现在有完整的输入,我们可以轻松地从我们的套接字中检索 ip,而无需猜测:
const ip = socket.conn.remoteAddress;
console.log(`client ip: ${ip}`);