【问题标题】:Image server for Netty and socket.ioNetty 和 socket.io 的图像服务器
【发布时间】:2016-08-10 19:31:03
【问题描述】:

我正在为我的架构中的以下问题寻找解决方案:

我有一个丰富的前端应用程序(React、RxJS、socket.io 等)和一个基于 netty-socketio 编写的 Web 服务层,我目前将其作为 Netty 应用程序运行。这个想法是服务器充当任何实现 socket.io 协议的客户端都可以使用的 API 层,我的前端应用程序就是其中之一。我真的可以在任何地方托管它,可能是一个 CDN。

我遇到的问题是文件,更具体地说是图像处理。经典用例是上传用户头像。我的普通 socket.io 协议不支持它,所以我想出了几个理论上的解决方案:

  1. 通过 socket.io API 将图像作为二进制文件上传,将图像存储在服务器的文件系统中,也可以将它们作为二进制文件访问。我的问题是我必须做的序列化/反序列化,而且不同的文件扩展名等似乎容易出错。

  2. 在 Netty 中实现一个 HTTP 解析器,例如 this example,在不同端口上的同一个实例中运行它。我已经对此进行了测试,它确实有效,但它的级别非常低,而且我不是 Netty 专家。

  3. 创建一个单独的 HTTP 文件服务器,可能使用 servlet 并使用它来存储和引用图像,让前端直接上传到此服务器,只需发送对 socket.io API 的引用以保存在数据库中.我不确定的是这样一个事实,API 基本上希望 UI-s 处理自己的图像存储并仅报告引用,这似乎不安全且无法控制。

  4. 使用 CDN 代替 (3) 中描述的行为。这将是一个很好的生产就绪解决方案,但在我的非生产系统中可能会过大。

注意,在情况 (3) 和 (4) 中,我可以将前端托管在同一个地方,现在我正在使用本地 node.js http-server。

我没有考虑过任何建议、意见和解决方案吗?

【问题讨论】:

    标签: java http websocket netty


    【解决方案1】:

    出于知识共享的目的,我将回答我的问题。我选择了选项二,因为我不想将图像存储逻辑与应用程序的其余部分分开。图像上传现在是一个 2 阶段过程:用户使用图像主体向不同端口上的相同 ip 发起 HTTP POST 请求。 Netty 处理程序捕获消息,并解析 HTTP POST,就像引用的示例一样。然后图像作为字节缓冲区存储在内存中(在有限的时间内),并在 HTTP 响应中返回唯一的 UUID。之后,由客户端负责通过 websocket 连接调用相关 API,发送相关文本数据包含上述 UUID 作为对上传数据的引用。套接字处理程序验证此请求,根据临时存储的哈希值读取字节缓冲区,将其写入磁盘。这样做的好处是临时缓冲区,因此可以在写入磁盘之前正确验证请求。

    【讨论】:

      猜你喜欢
      • 2012-12-19
      • 2012-03-19
      • 2023-03-28
      • 1970-01-01
      • 2016-11-08
      • 2013-11-08
      • 1970-01-01
      • 1970-01-01
      • 2013-01-27
      相关资源
      最近更新 更多