V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
find
V2EX  ›  问与答

服务端大神们,询问数据处理缓冲区问题

  •  
  •   find · 2014-08-12 17:39:06 +08:00 · 2581 次点击
    这是一个创建于 3782 天前的主题,其中的信息可能已经有所发展或是发生改变。
    用QT开发一个服务端程序,主要接受100个设备发送过来的数据,然后分析数据存储在mysql(这里处理的时间可能超过1秒)。其中每一个设备每个1秒中发送一次数据,之前没有用缓冲区结果连接了3个设备就崩掉了,想知道就是除了加缓冲区还有么有其他的方法或者缓冲区是一个设备一个还是一共一个缓冲区
    7 条回复    2014-08-12 21:53:43 +08:00
    canesten
        1
    canesten  
       2014-08-12 18:09:26 +08:00
    每个socket链接单独分一个缓冲区会比较省心
    find
        2
    find  
    OP
       2014-08-12 18:29:09 +08:00
    @canesten 加入缓冲去过后,后面是不是还需要在开一个线程在读缓冲区,在对数据进行操作啊
    canesten
        3
    canesten  
       2014-08-12 18:34:54 +08:00
    你打算轮询缓冲区?我不太理解你的思路。
    find
        4
    find  
    OP
       2014-08-12 18:42:39 +08:00
    @canesten 我的意思就是生产者和消费者,当接收到tcp连接的的时候开起一个线程(生产者),生产者就是接受到的数据放入缓冲区,然后就等下一次数据到来时候继续将数据放入缓冲区,(消费者)就是负责读取缓冲区域的数据,然后处理存入数据库,(问题是,这样有过TCP连接是不是要开很多线程)这样可以吗,或者还有更好的解决模型
    canesten
        5
    canesten  
       2014-08-12 18:47:56 +08:00
    Epoll可以注册一个回调函数
    这样每次有新的生产者来放数据就可以直接调用你注册的函数了
    可以科普一下“多路复用”技术(I/O multiplexing)
    find
        6
    find  
    OP
       2014-08-12 18:52:15 +08:00
    @canesten 刚看完epoll 的叙述,我想说的就是我的那种生存者,消费者那种可不可行,或者直接接受TCP连接的时候用epoll可不可以
    wecoders
        7
    wecoders  
       2014-08-12 21:53:43 +08:00
    1个链接1个线程,称之为多线程模型
    epoll多路复用,可以减少线程数
    生产者/消费者可行,一种典型的处理方式
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3063 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 14:14 · PVG 22:14 · LAX 06:14 · JFK 09:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.