find
V2EX  ›  问与答

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

  •  
  •   find · Aug 12, 2014 · 3005 views
    This topic created in 4333 days ago, the information mentioned may be changed or developed.
    用QT开发一个服务端程序,主要接受100个设备发送过来的数据,然后分析数据存储在mysql(这里处理的时间可能超过1秒)。其中每一个设备每个1秒中发送一次数据,之前没有用缓冲区结果连接了3个设备就崩掉了,想知道就是除了加缓冲区还有么有其他的方法或者缓冲区是一个设备一个还是一共一个缓冲区
    7 replies    2014-08-12 21:53:43 +08:00
    canesten
        1
    canesten  
       Aug 12, 2014
    每个socket链接单独分一个缓冲区会比较省心
    find
        2
    find  
    OP
       Aug 12, 2014
    @canesten 加入缓冲去过后,后面是不是还需要在开一个线程在读缓冲区,在对数据进行操作啊
    canesten
        3
    canesten  
       Aug 12, 2014
    你打算轮询缓冲区?我不太理解你的思路。
    find
        4
    find  
    OP
       Aug 12, 2014
    @canesten 我的意思就是生产者和消费者,当接收到tcp连接的的时候开起一个线程(生产者),生产者就是接受到的数据放入缓冲区,然后就等下一次数据到来时候继续将数据放入缓冲区,(消费者)就是负责读取缓冲区域的数据,然后处理存入数据库,(问题是,这样有过TCP连接是不是要开很多线程)这样可以吗,或者还有更好的解决模型
    canesten
        5
    canesten  
       Aug 12, 2014
    Epoll可以注册一个回调函数
    这样每次有新的生产者来放数据就可以直接调用你注册的函数了
    可以科普一下“多路复用”技术(I/O multiplexing)
    find
        6
    find  
    OP
       Aug 12, 2014
    @canesten 刚看完epoll 的叙述,我想说的就是我的那种生存者,消费者那种可不可行,或者直接接受TCP连接的时候用epoll可不可以
    wecoders
        7
    wecoders  
       Aug 12, 2014
    1个链接1个线程,称之为多线程模型
    epoll多路复用,可以减少线程数
    生产者/消费者可行,一种典型的处理方式
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2637 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 15:49 · PVG 23:49 · LAX 08:49 · JFK 11:49
    ♥ Do have faith in what you're doing.