RPC
文章平均质量分 62
push_rbp
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
RPC设计--TcpConnection和TcpServer
对于写,则是应用层调用写接口,将其写入到TcpBuffer中,当Fd发生可写事件后,调用写方法TcpConnection::write,将TcpBuffer中的数据写到fd中。在可写事件执行完后,需要将其从epoll中删除,等到需要发送数据时才添加写事件,因为fd大部分时候是可写的,就会一直触发可写事件,既然OutBuffer中的数据已经全部写到fd中了,就应该删除该事件。在可读事件执行完后,不需要将fd的可读事件移出,因为当前这个IO线程本身就是为该通信fd服务的,始终监听fd的可读事件。原创 2024-12-08 23:28:39 · 604 阅读 · 0 评论 -
RPC设计--TcpAcceptor
可提供getListenFd方法,以此构建FdEvent对象,提供accept方法,当listenfd上有客户端连接时调用,返回clientfd、client端地址。其功能较为简单,把套接字通信的一整套流程封装起来。在构造函数中就创建好连接套接字、设置好端口复用,等待accept,即自己封装socket 、 bind等函数调用。传入本地要监听的地址和端口,完成上述流程。原创 2024-12-08 22:21:54 · 400 阅读 · 0 评论 -
RPC设计--应用层缓冲区,TcpBuffer
提供readFromBuffer接口,从读索引位置开始读数据,读完指定的字节数后,判断是否需要进行读写索引的调整,因为这里不是环形缓冲区,当写入数据,读出来后,buffer前面的空间已经可用了,但是读写索引都指向了靠后的位置,导致可写空间不够。提供writeToBuffer接口,当用数据写入时,将数据从write_index位置向后写,如果缓存空间不够,需要进行扩容,写完数据后,需要增加write_index对应的字节数。参考其中的tcpbuffer.cpp/h。可提供可读字节数、可写字节数等接口。原创 2024-12-08 22:14:14 · 481 阅读 · 0 评论 -
RPC设计--从reactor设计 (IOthread)
一般的一个网络IO库都是主从reactor模式,即主线程中有一个MainReactor,其负责监听ListenFd,当接受到新的用户连接时,返回的clientfd并不会加入的MainReacotr,而是在子线程(这里称为IO线程)中,创建一个新的event_loop(即从Reactor, subreacotr),将clientfd加入到此SubReactor中,这样的架构称为主从reactor架构。其中io_thread.cpp 和io_thread_group.cpp。原创 2024-12-08 21:45:08 · 473 阅读 · 0 评论 -
RPC设计--EventLoop和FdEvent
这里的wakeup_fd手段是必要的,因为EventLoop线程大多时候阻塞在epoll_wait中,当需要EventLoop退出或进行处理时(如添加事件),又需要EventLoop线程自身做,所以需要一套通知机制,发一个通知,让epoll_wait返回,去执行对应的任务,而对应的任务本身就通过回调函数传入。接下来需要执行这个回调函数,一般的需要异步执行这个回调函数,所以在EventLoop内部会放一个任务列表,也就是一个回调函数的列表:pending_tasks。原创 2024-12-02 11:43:54 · 488 阅读 · 0 评论 -
RPC中定时器制作思路
执行完成后,需要重置到期时间,以time_events中第一个到期的时间设置成timer_fd的时间,即下次epoll_wait返回,调用OnTime的时间。timer是具体的定时器类,内部包含多个time_event,由于多个time_event可能有相同的执行时间,可以采用std::multimap 这些time_event, 其中key为执行时间戳,value为time_event.构造函数传入这些参数,即1:到期执行的任务函数 2:重复间隔时间 3:首次执行的时间戳。原创 2024-12-01 23:45:37 · 358 阅读 · 0 评论
分享