关于 socket 异步读取的问题

2015-11-18 22:16:22 +08:00
 erichuang1994

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

1458 次点击
所在节点    问与答
5 条回复
wy315700
2015-11-18 22:16:42 +08:00
epoll
ryd994
2015-11-18 22:41:20 +08:00
小规模用 select 就行,多了就用 epoll
erichuang1994
2015-11-18 23:09:30 +08:00
@wy315700
@ryd994
谢谢,待会试试。其实是在 tornado 里面发现 ioloop 事件好像太多了, socket 两次读隔了几百毫秒,实在无法接受。两次数据的到达间隔应该只在 20ms 左右的。 tornado 有什么可以设置事件优先级的东西吗,找了一下没找到
ryd994
2015-11-18 23:33:16 +08:00
@erichuang1994 发送端 TCP_NODELAY ,接收端 non_blocking 试试
justfly
2015-11-18 23:55:01 +08:00
@erichuang1994 跟事件多少没关系 tornado 单线程的 要保证数据收到立刻处理 你的所有业务逻辑必须在 20ms 内完成

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/237164

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX