郑树新

Results 62 comments of 郑树新

多谢作者的无私奉献,我最近正准备参考一些文档实现HTTP2功能,从网上搜到了这个项目。

> > > > 多谢作者的无私奉献,我最近正准备参考一些文档实现HTTP2功能,从网上搜到了这个项目。 > > @zhengshuxin 您好呀。欢迎随时交流🤪 我之前在公司里面是做网络层这一块的,从第三层到第七层都有一些研究心得。 真是幸会啊,我也是做这方面的,https://github.com/acl-dev/acl 是我弄的,欢迎提建议。

(gdb) bt #0 0x0000000000000000 in ?? () #1 0x00000000004d48eb in CharOutputDev::drawChar(GfxState_, double, double, double, double, double, double, unsigned int, int, unsigned int_, int) () #2 0x00000000004c7fbc in VectorGraphicOutputDev::drawChar(GfxState_, double, double,...

服务端针对每一个客户端可以创建两个协程,一个读协程,一个写协程,读协程负责阻塞式从客户端读数据,写协程负责向客户端写数据,写协程维护一个发送队列(其它协程往里面放数据)并从队列中阻塞式读数据,然后再将数据发给客户端,可以参考例子:lib_fiber/samples/chat/server/main.cpp

之所以没将将超时设为-1,就是防止没有句柄被监听的情况。另外,该超时值还会被动态地修改,比如在 hooked poll中。

还需要拿一些例子去验证一下,另外,acl_fiber_nready 函数中需要把所有准备好的协程都得要包含进去。

acl 协程hook了底层的I/O API,所以可以将 socket 的 I/O 过程协程,我曾在 https://mp.weixin.qq.com/s/XAEzZAUYuOhuqMOszNFe2A 文章中介绍过 acl 协程的原理,但还未曾讲过 acl 协程是如何 hook 系统 I/O API 的,将来有时间可以讲讲这块。

对,原理是这样的。

你所说的这个功能在 acl::fiber_tbox 类里已经实现,该类是基于 C 代码中的 acl_fiber_event_xxx 系列操作,在 acl_fiber_event_wait() 时一旦发生等待,则针对不同平台采用不同的方法: 1、Linux:eventfd(),这个仅占用一个句柄; 2、MacOS:socketpair,占用两个句柄; 3、Windows:用 TCP socket 模拟的 socketpair,因为在windows存在 iocp 引擎及界面消息引擎,所以使用 tcp socket 更通用些;如果有人提供windows下的优化版本,则不胜感激。 另外,我曾经想将等待时所用的事件句柄合并成一个放在主循环里来实现,后来没时间弄这块,也许将来可以继续优化。

是的。使用 acl redis client 建议还是用集群模式。