pingmm 发表于 2016-08-10 17:51

libevent不就是异步的吗

yulihua49 发表于 2016-08-11 16:02

pingmm 发表于 2016-08-10 17:51 static/image/common/back.gif
libevent不就是异步的吗
不是。
同步阻塞等事件。

pingmm 发表于 2016-08-11 17:32

yulihua49 发表于 2016-08-11 16:02 static/image/common/back.gif
不是。
同步阻塞等事件。把一堆fd放到epoll里,然后loop等任意一个事件回调,这能叫同步?

yulihua49 发表于 2016-08-12 10:22

本帖最后由 yulihua49 于 2016-08-12 10:23 编辑

pingmm 发表于 2016-08-11 17:32 static/image/common/back.gif
把一堆fd放到epoll里,然后loop等任意一个事件回调,这能叫同步?
人家说的libevent.
libevent是同步的。
只有epoll是异步的。

yulihua49 发表于 2016-08-12 10:25

本帖最后由 yulihua49 于 2016-08-12 11:29 编辑

魔鬼的惊叹 发表于 2016-08-10 10:40 static/image/common/back.gif
回复 5# yulihua49
epoll不是同步IO吗
正好反了,libevent是同步,epoll是异步事件通知,不做IO。
确切说,epoll也不是异步,但可以帮助你实现异步操作。
http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=4252407&extra=

魔鬼的惊叹 发表于 2016-08-12 15:04

回复 15# yulihua49
我认为你的理解有问题,epoll调用成功返回后需要程序自身来进行io,内核并没有帮助完成io,所以是同步的


   

yulihua49 发表于 2016-08-12 15:27

本帖最后由 yulihua49 于 2016-08-12 15:32 编辑

魔鬼的惊叹 发表于 2016-08-12 15:04 static/image/common/back.gif
回复 15# yulihua49
我认为你的理解有问题,epoll调用成功返回后需要程序自身来进行io,内核并没有帮助完 ...
epoll本身是同步阻塞的。但是可以帮助你实现异步IO。它只是事件处理器,IO要你自己实现。

yulihua49 发表于 2016-08-12 15:37

本帖最后由 yulihua49 于 2016-08-12 15:50 编辑

魔鬼的惊叹 发表于 2016-08-12 15:04 static/image/common/back.gif
回复 15# yulihua49
我认为你的理解有问题,epoll调用成功返回后需要程序自身来进行io,内核并没有帮助完 ...
楼主问题:
现在的问题是
手机客户端发送http请求给 http server,httpserver再找到对应的websocket,将消息发送给他。理论上是可行的,但是libevent没办法做到异步处理,当收到一个http请求的时候,将数据发送给websocket client后就得等,等的话就会严重影响其他的请求。有没有好的办法处理,处理有其他的解决方案。
--------------------------------------------------------------------------
使用epoll可以解决。当收到一个http请求的时候,将数据发送给websocket client后,把事件交给epoll,就可以干别的了。事件出现后自然能有线程处理。
各个线程可以把很多fd交给epoll,也可以有很多线程epoll_wait()。这样每个事件都不会被耽误。
哪怕只有一个线程,他可以把事件丢给epoll,然后自己去守候epoll,耽误不了别的任务。
页: 1 [2]
查看完整版本: 互联网架构问题