S 端从数据源获取数据并保存,当 C 端请求时,返回 S 端保存的数据 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Devin
V2EX    .NET

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

  •  
  •   Devin 2018-02-25 20:14:22 +08:00 via iPhone 2570 次点击
    这是一个创建于 2859 天前的主题,其中的信息可能已经有所发展或是发生改变。
    1 S 端的作用可以理解成是一个中继
    2 S 端每分钟更新 1 次数据,并保存此数据 1 分钟
    3 C 端用户 100 个,每隔一段时间向 S 请求一次数据,S 端返回当时保存的数据

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

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

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

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

    问题:

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

    2. 通讯方式是什么?

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

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

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

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

    4. 在一楼我就提到了你最关心的问题,至于怎么实现要么隔行如隔山你得从基础了解,要么你完全心里就有数,然而你只看到了所谓的敌意还先喷为敬,呵呵哒。
    oh
        13
    oh  
       2018-02-25 23:48:47 +08:00 via iPhone   1
    再补一个关键词,解决你所谓的 “每分钟” 的问题,定时器 Timer 或者线程挂起一分钟都可以。别又说没给知识点,再详细不如直接写份代码给你了。
    wizardoz
        14
    wizardoz  
       2018-02-26 09:53:54 +08:00   1
    用 redis。
    C 端访问时,S 端先从 redis 查找数据,如果
    没有数据,S 端更新数据,保存入 redis 并设数据超时事件为 1 分钟
    有数据,直接返回
    Devin
        15
    Devin  
    OP
       2018-02-26 19:23:46 +08:00 via iPhone
    @wizardoz 请问 S 端怎么做到,一边更新数据,一边响应 C 端呢?用 2 个任务来分别处理么?
    wizardoz
        16
    wizardoz  
       2018-02-27 09:38:34 +08:00   1
    @Devin 看你对数据更新时间的要求,如果需要严格一分钟更新,那么就专门用一个程序来更新数据放到 redis。一个程序当 S 端。如果对这个时间不是那么严格,只是要保证 C 端取到的数据是一分钟保质期以内的。那么用 C 端的请求来驱动数据更新就可以了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1243 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 17:30 PVG 01:30 LAX 09:30 JFK 12:30
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86