
fdbus
文章平均质量分 75
一种实用的通信中间价,支持远程进程调用、同步调用、异步调用、主题发布等功能,可用于进程间通信,也可用于线程间通信。
_DCG_
这个作者很懒,什么都没留下…
展开
-
fdbus之事件循环及线程关系
但是我是从消息发送的代码去分析的,在消息接收流程里没有找到与该CThreadEventLoop事件循环有关的东西,反而是在CFdEventLoop中找到了消息接收的代码,从代码看又是冲突的,搞混淆了,目前位置还是没有搞明白消息循环接收是如何实现的。CBaseWorker是一个线程类,需要在该线程类类实现对事件循环。原创 2023-09-28 15:04:50 · 687 阅读 · 2 评论 -
fdbus之消息接收流程
若找到匹配的消息则进行处理,通过该序列号找到原始消息请求方的消息对象指针,最关键的部分来了,每个session对象都包含一个指向收到消息的指针mPayloadBuffer,该指针指向的内存每收到一条消息都会重新申请,然后通过下面的语句。上面的代码可以看到,首先获取消息头部的序列号mSn,每个发出的消息中的序列号是唯一的,在网络端点处理完成之后进行回复时也要将消息的序列号返回,以便原始请求消息发送方根据该序列号判断是否为自己发出消息匹配。这样大家就明白了一个消息的完整的过程了吧。完成消息体内容的替换。原创 2023-09-28 14:47:05 · 841 阅读 · 0 评论 -
fdbus之同步调用invoke的实现分析
虽然是同步调用,但是在条件变量mWakeupSignal阻塞之前调用了send方法,通过send方法源码可以看到虽然是同步调用,但是还是将消息数据或者说消息对象压入到事件队列,然后通过事件循环依次进行处理,不同的是通过条件变量mWakeupSignal调用wait方法对调用线程进行了阻塞,然后等待接收回复消息,并唤醒调用线程。通过上面代码可以看到CFdbMessage下invoke的同步调用接口包含两个参数,一个是指向消息对象的共享指针,一个是超时时间。这些个方法都是由端点调用的,是用户调用的入口。原创 2023-09-28 10:25:23 · 1165 阅读 · 0 评论 -
fdbus之CFdbSession类
CFdbSession 这个类有着很重要的作用,session的中文含义就是会话,按照我的理解,一个会话就是一个连接,一个连接就对应一个socket。这个类实现了网络通信的细节,或者说这个类是网络通信功能入口类,他后面可能会调用udpsession或者tcpsession或者调用uds相关的功能。前文我们讲述了CFdbMessage(CBaseMessage),这个消息类定义了消息的具体内容和消息的操作方法。那这个消息应该如何发送出去到对应的端点呢?说到这里就是通过CFdbSession这个类来实现的。原创 2023-09-27 21:23:34 · 478 阅读 · 0 评论 -
fdbus之CBaseMessage
这里将消息的操作分成几类,我这哩列出的可能不全,仅仅是将我认为重要的一些方法列出来。消息发送方法,例如pubish、invoke、send、broadcast、subscribe等及dispatchMsg函数,dispatchMsg是一个重要的函数,该函数包含了一系列的发送相关的方法。消息体构造方法:包括但不限于消息的组装方法例如buildHeader,deserialize,serialize等还,获取该消息的各个部分的偏移及长度等函数。原创 2023-09-27 20:06:29 · 664 阅读 · 0 评论 -
fdbus之CBaseClient类和CBaseServer类
该类的含义是端点,在网络中无论是客户端还是服务端他们都可以抽象为端点,他们的共性抽象成为了CBaseEndpoint类,下面我把我自己对这个类的一些理解放在下面不一定正确,希望对大家有所帮助。每个端点都对应一个网络节点,每个端点与其他网络端点建立一条连接就表示一条会话(session),一个端点可以存在多个会话。这些会话会保存到一个容器中。每个会话都会分配一个socket,以socket作为标识符,用于识别每个会话对象。原创 2023-09-27 17:59:40 · 930 阅读 · 1 评论