从服务器提供定期更新的图像而不会损坏
Provide periodically updated image from server without corruption
任务
我有一个 java 网络服务器,它提供对通过 opencv / javafx 从网络摄像头保存为文件并定期(例如每秒)更新的图像的访问。
问题
如果图像在传送到客户端时在服务器上更新,客户端上的图像当然是不完整的并且会损坏。
问题
保证客户端读取的图像始终作为一个整体传送的首选方法是什么?或者至少不应损坏图像。
我不介意有e。 G。上一张图片的上半部分,新图片的下半部分如果这是一个解决方案,但是你会如何处理这个?
为此你需要两件事:
- 您需要控制图像的创建,因此您通过 JavaFx 读取图像并将其存储在磁盘上。
- 您控制向客户的交付。
servlet 将帮助您做到这一点。
如果您自己将图像存储在磁盘上,您可能会阻止传送到客户端。
使用 ReentrantReadWriteLock 非常适合。
您在写入图像之前调用它的 writeLock.lock()
方法,并在完成时调用 writeLock.unlock()
。
为了交付给客户,您使用相同的锁,但在完成后调用 readLock.lock()method before sending the image to the client and
readLock.unlock()`。
Servlet 本身非常简单,您只需 return 将图像作为流从文件中读取,并设置读取锁定。
锁定将确保始终return编辑完整的图像,没有损坏的图像。
如果您不自己将图像存储在磁盘上,它会变得更加棘手。
您可以在收到创建通知后尝试将其复制到磁盘上,但这仍然会受到竞争条件的影响。
任务
我有一个 java 网络服务器,它提供对通过 opencv / javafx 从网络摄像头保存为文件并定期(例如每秒)更新的图像的访问。
问题
如果图像在传送到客户端时在服务器上更新,客户端上的图像当然是不完整的并且会损坏。
问题
保证客户端读取的图像始终作为一个整体传送的首选方法是什么?或者至少不应损坏图像。
我不介意有e。 G。上一张图片的上半部分,新图片的下半部分如果这是一个解决方案,但是你会如何处理这个?
为此你需要两件事:
- 您需要控制图像的创建,因此您通过 JavaFx 读取图像并将其存储在磁盘上。
- 您控制向客户的交付。 servlet 将帮助您做到这一点。
如果您自己将图像存储在磁盘上,您可能会阻止传送到客户端。 使用 ReentrantReadWriteLock 非常适合。
您在写入图像之前调用它的 writeLock.lock()
方法,并在完成时调用 writeLock.unlock()
。
为了交付给客户,您使用相同的锁,但在完成后调用 readLock.lock()method before sending the image to the client and
readLock.unlock()`。
Servlet 本身非常简单,您只需 return 将图像作为流从文件中读取,并设置读取锁定。 锁定将确保始终return编辑完整的图像,没有损坏的图像。
如果您不自己将图像存储在磁盘上,它会变得更加棘手。 您可以在收到创建通知后尝试将其复制到磁盘上,但这仍然会受到竞争条件的影响。