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

时间:2015-09-30 07:33:14

标签: java webserver

任务

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

问题

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

问题

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

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

1 个答案:

答案 0 :(得分:1)

你需要做两件事:

  1. 您需要控制图像创建,因此您可以通过JavaFx读取图像并将其存储在磁盘上。
  2. 您可以控制向客户端的交付。 servlet将帮助你做到这一点。
  3. 如果您自己将图像存储在磁盘上,则可以阻止向客户端发送图像。 使用ReentrantReadWriteLock非常适合。

    在编写图像之前调用其margin:0;方法,在完成后调用writeLock.lock()

    要传递给客户端,请使用相同的锁,但在完成后调用readLock.lock()writeLock.unlock() readLock.unlock()`。

    Servlet本身非常简单,只需将读取的图像作为流从文件返回,并使用读锁定。 锁定将确保始终返回完整的图像,不会损坏。

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