NodeJS Socket.io 数据太大,www.example.com不会发出

pftdvrlh  于 2023-01-16  发布在  Node.js
关注(0)|答案(2)|浏览(215)

我已经建立了一个可以发送图片的网络应用程序。对于小图片来说一切都很好。但是一旦它变大了一点~ 1000 x1000 px,socket.io就不发射了。它甚至没有声明一个错误。它就是不发送图片。
这是我的对象的外观:

chatBlock = {
username: "",
message: "",
date: new Date(),
file: null,
imgWidth: 0,
imgHeight: 0,
};

我就是这么发的

socket.emit('msgSend', chatBlock);

所以实际上非常基本,但是一旦图像(对象中的命名文件)变大,它就不发送它。

ni65a41a

ni65a41a1#

Socket.io 有邮件大小限制:请参阅www.example.com上的文档中的选项maxHttpBufferSizehttps://socket.io/docs/v4/server-options/#maxhttpbuffersize。您可以增加此限制,但请记住,将图像解析为JSON不是很有效。从长远来看,请考虑单独上传图像-常见的解决方案是使用HTTPPOST,获取上传的URL,然后将其发送给收件人。这更复杂,但完全避免了消息大小问题,因为文件上载可以是任何大小并且仍然以有效的方式流式传输。

ctzwtxfj

ctzwtxfj2#

正如官方文档所说,您应该使用maxhttpbuffersize
如果使用快递:

const express = require('express');
const app = express()
const server = require('http').Server(app)
const io = require('socket.io')(
  server,{
    maxHttpBufferSize: 1e7
  }
)

但是这个值是火星上的东西,叫做SI前缀
SI prefixmega表示106的因子,或者用指数表示法表示为1E6。
以下是用作maxhttpbuffersize的一些值

  • 1e6 = 1兆字节
  • 1e7 = 10兆字节
  • 1e8 = 100mb,这是可接受的最大有效负载

以下是一些值:https://physics.nist.gov/cuu/Units/prefixes.html

PD:我没有找到如何设置1.5 MB

相关问题