返回信息流http server用的nodejs处理请求 有一个请求是请求一个图片的 用下面的方式返回
```javascript
fs.createReadStream(image_path).pipe(response);
```
这个图片被服务器上的一个python服务维护(单线程) 会修改这个图片的内容
假设某个时间 python以每秒百次的频率修改这个图片 那么web端对这个图片的请求还能正常返回吗?
-----
自己测试了一下 python每秒10次的频率修改图片
web端的请求有时候就不显示图片了 f12里这个请求也只有100B的数据返回
针对这种情况应该怎么保证web端的对这个图片的正常请求呢?
自己查了一下都是在说加锁来保证修改一致性的。。但其实不怎么关心操作的一致性。只是希望前端能稳定的请求到这个图片 有什么好的方案吗?
这是一条镜像帖。来源:北邮人论坛 / java-script / #2095同步于 2017/5/7
该镜像源已超过 30 天没有更新,可能在源站已被删除。
JavaScript机器人发帖
web端请求服务器上一个正在被修改的文件会怎么样?
matsunatsuri
2017/5/7镜像同步20 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
异步的read还是会出现读取不到的情况。
时效性要求不高的场合 能不能设置定时器 每隔几秒把这个文件同步读取到内存里作为一个对象维护
然后请求来的时候 直接返回这个内存中的数据呢。。
【 在 h452114240 的大作中提到: 】
: 那就不用流的方式试试,直接read文件,再write res回去
没有研究过,但是我有一个脑洞
服务器上有AB两份文件,以及一个指针表明应该读取哪一个。如果此时指针表明应该读取A,后端要修改图片时先修改B,然后把指针指向B。指针可以通过数据库放一个bool完成
AB的同步如何处理呢。。要想让修改生效 A迟早要和修改完的B同步啊 感觉本质上和用一个在内存中的对象来缓存图片数据差别不大。。A和B同步时还是绕不开文件读取的问题
【 在 lance6716 的大作中提到: 】
: 没有研究过,但是我有一个脑洞
:
: 服务器上有AB两份文件,以及一个指针表明应该读取哪一个。如果此时指针表明应该读取A,后端要修改图片时先修改B,然后把指针指向B。指针可以通过数据库放一个bool完成
问题里没有说清楚。当前的图片需要保存之前所有修改的痕迹 所以修改完B修改A的时候需要同步。。
【 在 lance6716 的大作中提到: 】
: 没有研究过,但是我有一个脑洞
:
: 服务器上有AB两份文件,以及一个指针表明应该读取哪一个。如果此时指针表明应该读取A,后端要修改图片时先修改B,然后把指针指向B。指针可以通过数据库放一个bool完成
A和B是不同步的,就是相当于文件的第奇数个版本和第偶数个版本,当前最新的是哪个靠指针指定
之前修改的痕迹在python内存里,会往A或者B里写……我还是查查这究竟该叫什么吧……
【 在 matsunatsuri 的大作中提到: 】
: AB的同步如何处理呢。。要想让修改生效 A迟早要和修改完的B同步啊 感觉本质上和用一个在内存中的对象来缓存图片数据差别不大。。A和B同步时还是绕不开文件读取的问题
没学过多线程吧?这种互斥不解决,还能用吗?你的问题在java和rust中都有解决方案,比如rust的智能指针Mutex就是专门解决共享数据的,感觉楼主一直在实践各种东西,前后端都有涉猎,但是一直自己鼓弄,好多成熟的方案都不了解,自己搞了一套各种问题,在校?实习?公司?难道真的找不到合理的方案么?你做前端可以不关心这个,但是你的后端要合理,这种后端是你自己搭的?换言之,以你现在前端的能力解决不了这种问题,去看看java和rust怎么实现读写锁,你这架构没有cdn没缓存,服务器压力得多大啊,生产环境服务器不会和web端直接io的