任务
我有一个java网络服务器,可以访问通过opencv / javafx从网络摄像头保存为文件的图像,并定期(例如每秒)更新一次。
问题
如果在将图像传送到客户端时在服务器上更新图像,则客户端上的图像当然不完整并且已损坏。
问题
保证客户端读取的图像始终作为一个整体传递的首选方法是什么?或者至少图像不应该被破坏。
我不介意有e。 G。上图像部分来自上一个图像,下部来自新图像,如果这将是一个解决方案,但你会如何处理?
答案 0 :(得分:1)
你需要做两件事:
如果您自己将图像存储在磁盘上,则可以阻止向客户端发送图像。 使用ReentrantReadWriteLock非常适合。
在编写图像之前调用其margin:0;
方法,在完成后调用writeLock.lock()
。
要传递给客户端,请使用相同的锁,但在完成后调用readLock.lock()writeLock.unlock()
readLock.unlock()`。
Servlet本身非常简单,只需将读取的图像作为流从文件返回,并使用读锁定。 锁定将确保始终返回完整的图像,不会损坏。
如果您没有自己将图像存储在磁盘上,则会变得更加棘手。 您可以在收到创建通知后尝试将其复制到磁盘上,但仍然会受到竞争条件的影响。