从服务器提供定期更新的图像而不会损坏

Provide periodically updated image from server without corruption

任务

我有一个 java 网络服务器,它提供对通过 opencv / javafx 从网络摄像头保存为文件并定期(例如每秒)更新的图像的访问。

问题

如果图像在传送到客户端时在服务器上更新,客户端上的图像当然是不完整的并且会损坏。

问题

保证客户端读取的图像始终作为一个整体传送的首选方法是什么?或者至少不应损坏图像。

我不介意有e。 G。上一张图片的上半部分,新图片的下半部分如果这是一个解决方案,但是你会如何处理这个?

为此你需要两件事:

  1. 您需要控制图像的创建,因此您通过 JavaFx 读取图像并将其存储在磁盘上。
  2. 您控制向客户的交付。 servlet 将帮助您做到这一点。

如果您自己将图像存储在磁盘上,您可能会阻止传送到客户端。 使用 ReentrantReadWriteLock 非常适合。

您在写入图像之前调用它的 writeLock.lock() 方法,并在完成时调用 writeLock.unlock()

为了交付给客户,您使用相同的锁,但在完成后调用 readLock.lock()method before sending the image to the client andreadLock.unlock()`。

Servlet 本身非常简单,您只需 return 将图像作为流从文件中读取,并设置读取锁定。 锁定将确保始终return编辑完整的图像,没有损坏的图像。

如果您不自己将图像存储在磁盘上,它会变得更加棘手。 您可以在收到创建通知后尝试将其复制到磁盘上,但这仍然会受到竞争条件的影响。