Devin
V2EX  ›  .NET

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

  •  
  •   Devin · Feb 25, 2018 via iPhone · 2727 views
    This topic created in 3001 days ago, the information mentioned may be changed or developed.
    1 S 端的作用可以理解成是一个中继
    2 S 端每分钟更新 1 次数据,并保存此数据 1 分钟
    3 C 端用户 100 个,每隔一段时间向 S 请求一次数据,S 端返回当时保存的数据

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

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

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

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

    问题:

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

    2. 通讯方式是什么?

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

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

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

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

    4. 在一楼我就提到了你最关心的问题,至于怎么实现要么隔行如隔山你得从基础了解,要么你完全心里就有数,然而你只看到了所谓的敌意还先喷为敬,呵呵哒。
    oh
        13
    oh  
       Feb 25, 2018 via iPhone   ❤️ 1
    再补一个关键词,解决你所谓的 “每分钟” 的问题,定时器 Timer 或者线程挂起一分钟都可以。别又说没给知识点,再详细不如直接写份代码给你了。
    wizardoz
        14
    wizardoz  
       Feb 26, 2018   ❤️ 1
    用 redis。
    C 端访问时,S 端先从 redis 查找数据,如果
    没有数据,S 端更新数据,保存入 redis 并设数据超时事件为 1 分钟
    有数据,直接返回
    Devin
        15
    Devin  
    OP
       Feb 26, 2018 via iPhone
    @wizardoz 请问 S 端怎么做到,一边更新数据,一边响应 C 端呢?用 2 个任务来分别处理么?
    wizardoz
        16
    wizardoz  
       Feb 27, 2018   ❤️ 1
    @Devin 看你对数据更新时间的要求,如果需要严格一分钟更新,那么就专门用一个程序来更新数据放到 redis。一个程序当 S 端。如果对这个时间不是那么严格,只是要保证 C 端取到的数据是一分钟保质期以内的。那么用 C 端的请求来驱动数据更新就可以了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3080 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 51ms · UTC 08:08 · PVG 16:08 · LAX 01:08 · JFK 04:08
    ♥ Do have faith in what you're doing.