erichuang1994
V2EX  ›  问与答

关于 socket 异步读取的问题

  •  
  •   erichuang1994 · Nov 18, 2015 · 1884 views
    This topic created in 3853 days ago, the information mentioned may be changed or developed.

    现在的情况是这样的,需要异步读 socket 中的数据并且在 socket 有数据到达时可以在尽可能短的时间内就去读他(一次到达的数据比较小)。诸君有什么好方案吗?暂时试了每隔 25ms 就去读一次,不过感觉这样效率太低了。

    5 replies    2015-11-18 23:55:01 +08:00
    wy315700
        1
    wy315700  
       Nov 18, 2015
    epoll
    ryd994
        2
    ryd994  
       Nov 18, 2015
    小规模用 select 就行,多了就用 epoll
    erichuang1994
        3
    erichuang1994  
    OP
       Nov 18, 2015
    @wy315700
    @ryd994
    谢谢,待会试试。其实是在 tornado 里面发现 ioloop 事件好像太多了, socket 两次读隔了几百毫秒,实在无法接受。两次数据的到达间隔应该只在 20ms 左右的。 tornado 有什么可以设置事件优先级的东西吗,找了一下没找到
    ryd994
        4
    ryd994  
       Nov 18, 2015
    @erichuang1994 发送端 TCP_NODELAY ,接收端 non_blocking 试试
    justfly
        5
    justfly  
       Nov 18, 2015
    @erichuang1994 跟事件多少没关系 tornado 单线程的 要保证数据收到立刻处理 你的所有业务逻辑必须在 20ms 内完成
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1525 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 16:45 · PVG 00:45 · LAX 09:45 · JFK 12:45
    ♥ Do have faith in what you're doing.