S 端从数据源获取数据并保存,当 C 端请求时,返回 S 端保存的数据

2018-02-25 20:14:22 +08:00
 Devin
1 S 端的作用可以理解成是一个中继
2 S 端每分钟更新 1 次数据,并保存此数据 1 分钟
3 C 端用户 100 个,每隔一段时间向 S 请求一次数据,S 端返回当时保存的数据

请问 S 端应该怎么设计?
1 S 端的数据怎么保存在内存不是在硬盘,减少读盘加快响应
2 怎么同时做到保存和响应 C 端请求
3 涉及到哪些方面的知识
2296 次点击
所在节点    .NET
16 条回复
oh
2018-02-25 21:07:22 +08:00
要么说 server / client 要么说服务端客户端,
至于保存在哪里,这不是代码可以控制的么,你想保存在哪就保存在哪啊,.net 也有缓存,
……
打了这么多 看到后面两个问题 不想再打了
oh
2018-02-25 21:08:28 +08:00
找个会写代码的人帮你实现吧,也不至于问这样的问题
Devin
2018-02-25 21:20:52 +08:00
@oh 谢谢你的时间,想必阁下出生时就会写代码
chinvo
2018-02-25 21:24:01 +08:00
不会就去学

只会伸手是不会有好心人喂的

或者就花钱找人实现
或者就花时间自己学
lbp0200
2018-02-25 21:24:15 +08:00
这就是缓存
chinvo
2018-02-25 21:24:16 +08:00
没人出生就会写代码
oh
2018-02-25 21:34:10 +08:00
@Devin 术业有专用,不管你原先是不是做这一块的,问出这样的问题说明你连基础概念都没有,要么找人做,要么从基础学,而不是让别人来给你面向结果的思路。祝你下辈子出生就会写代码。
CEBBCAT
2018-02-25 22:01:24 +08:00
前提:

1. Server 的数据从哪里来?你说是个中继, 那就要把拓扑图摆出来嘛

问题:

1. 你不主动去写, 数据很难存到硬盘里, 但系统可能会因为内存不足而启用虚拟内存

2. 通讯方式是什么?

3. 网络编程 编程基础 编程入门
Devin
2018-02-25 22:05:39 +08:00
@oh
谢谢,这也不错
那请问应该怎么学基础,或者第 3 个问题,涉及到哪些方面的知识?
另外,新手问问题经常不着边际,请包容。。。你的文字透露出你现在心情很不好,不要把我当你的出气筒,我可以感受到你对新手满满的敌意
我知道基础弱,之所以问怎么实现,目的是从回复中找出知识点
还有,我就想自己做,就想!@chinvo
Devin
2018-02-25 22:25:00 +08:00
@CEBBCAT server 获取到的数据是由读取另一个程序生成的一个 10KB 文本文件处理后转成的一个 List<string>
目前知道可以把这个 List<string>写入硬盘,局域网共享给 client 端读取,但这种方式明显不好,因而要换成 cs 架构
另外用 wcf 来实现 cs 通讯也是没问题的,就是不知道怎么把 server 处理的数据缓存后响应给 client
CEBBCAT
2018-02-25 23:40:00 +08:00
@Devin #10 Socket
oh
2018-02-25 23:46:01 +08:00
@Devin

1. 既然是局域网内的就没有 nat 问题了,服务端直接监听某个 http 端口让客户端每分钟请求一次,取得最新的数据;

2. 也可以反过来,服务端监听 tcp 端口,客户端全部保持连接,服务端每分钟就自动推送新版本的数据给客户端,看你自己的需求。

3. 既然服务端是一个持久服务,而且一直是活动状态,只要你自己别写入硬盘那基本都是在内存里,也可以手动保存到 Cache 中,.net 的缓存有很多,而且 .net 本身的垃圾回收机制挺完善的,对于每分钟 100 并发这种级别的需求不用过度设计。

4. 在一楼我就提到了你最关心的问题,至于怎么实现要么隔行如隔山你得从基础了解,要么你完全心里就有数,然而你只看到了所谓的敌意还先喷为敬,呵呵哒。
oh
2018-02-25 23:48:47 +08:00
再补一个关键词,解决你所谓的 “每分钟” 的问题,定时器 Timer 或者线程挂起一分钟都可以。别又说没给知识点,再详细不如直接写份代码给你了。
wizardoz
2018-02-26 09:53:54 +08:00
用 redis。
C 端访问时,S 端先从 redis 查找数据,如果
没有数据,S 端更新数据,保存入 redis 并设数据超时事件为 1 分钟
有数据,直接返回
Devin
2018-02-26 19:23:46 +08:00
@wizardoz 请问 S 端怎么做到,一边更新数据,一边响应 C 端呢?用 2 个任务来分别处理么?
wizardoz
2018-02-27 09:38:34 +08:00
@Devin 看你对数据更新时间的要求,如果需要严格一分钟更新,那么就专门用一个程序来更新数据放到 redis。一个程序当 S 端。如果对这个时间不是那么严格,只是要保证 C 端取到的数据是一分钟保质期以内的。那么用 C 端的请求来驱动数据更新就可以了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/432542

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX