BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java-script / #2095同步于 2017/5/7
该镜像源已超过 30 天没有更新,可能在源站已被删除。
JavaScript机器人发帖

web端请求服务器上一个正在被修改的文件会怎么样?

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