Ez *_* Az 7 large-data node.js socket.io typescript
我正在编写一个带有 Nodejs 后端和有角度前端的多层纸牌游戏(如炉石传说)。
我尝试使用 Socket.IO 连接两者,但事实证明,如果我发送一个超过 8000 个字符的 JSON 对象(gameState 对象),那么客户端只会不断断开连接并重新连接。
如果我只发送对象的 6000 个字符的子字符串,一切都很好,但它会崩溃超过 8000 个(我需要大约 20 000 个)
我只在本地主机中尝试过
这是后端:
constructor() {
this.app = express();
this.port = process.env.PORT || ChatServer.PORT;
this.server = createServer(this.app);
this.io = socketIo(this.server);
this.gameService = new GameService();
this.listen();
}
listen(): void {
this.server.listen(this.port, () => {
console.log('Running server on port %s', this.port);
});
this.io.on('connect', (socket: any) => {
console.log('Connected client on port %s.', this.port);
socket.on('message', (m: string) => {
console.log('[server](message): %s', JSON.stringify(m));
this.io.emit('message', JSON.stringify(this.gameService.getGameState()).substring(1, 6000));
});
socket.on('disconnect', () => {
console.log('Client disconnected');
});
});
}
Run Code Online (Sandbox Code Playgroud)
编辑:它与ajax配合得很好,但我需要套接字
小智 6
Socket.io 有一个默认值1 MB(v3 及以上)作为它可以接收的最大数据大小。对于 v2 及之前版本,该值曾经是100 MB。
您可以使用它maxHttpBufferSize来增加创建服务器时想要接收的数据包的最大大小。
const io = require("socket.io")(httpServer, {
maxHttpBufferSize: 1e8 // 100 MB
});
Run Code Online (Sandbox Code Playgroud)
根据迁移文档:
- 发送大负载(> 1MB)时客户端会断开连接
这可能是因为 的默认值为
maxHttpBufferSizenow1MB。当服务器收到大于此大小的数据包时,将断开客户端的连接,以防止恶意客户端使服务器过载。您可以在创建服务器时调整该值:
| 归档时间: |
|
| 查看次数: |
2292 次 |
| 最近记录: |