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

关于 socket 异步读取的问题

  •  
  •   erichuang1994 · 2015-11-18 22:16:22 +08:00 · 1457 次点击
    这是一个创建于 3098 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    5 条回复    2015-11-18 23:55:01 +08:00
    wy315700
        1
    wy315700  
       2015-11-18 22:16:42 +08:00
    epoll
    ryd994
        2
    ryd994  
       2015-11-18 22:41:20 +08:00
    小规模用 select 就行,多了就用 epoll
    erichuang1994
        3
    erichuang1994  
    OP
       2015-11-18 23:09:30 +08:00
    @wy315700
    @ryd994
    谢谢,待会试试。其实是在 tornado 里面发现 ioloop 事件好像太多了, socket 两次读隔了几百毫秒,实在无法接受。两次数据的到达间隔应该只在 20ms 左右的。 tornado 有什么可以设置事件优先级的东西吗,找了一下没找到
    ryd994
        4
    ryd994  
       2015-11-18 23:33:16 +08:00
    @erichuang1994 发送端 TCP_NODELAY ,接收端 non_blocking 试试
    justfly
        5
    justfly  
       2015-11-18 23:55:01 +08:00
    @erichuang1994 跟事件多少没关系 tornado 单线程的 要保证数据收到立刻处理 你的所有业务逻辑必须在 20ms 内完成
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3732 人在线   最高记录 6547   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 04:36 · PVG 12:36 · LAX 21:36 · JFK 00:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.