vsomeip用到的socket
概述:
vsomeip用到的socket的代码全部都在implementation\endpoints目录下面,主要分布在下面六个endpoint类中:
local_client_endpoint_impl // 本地客户端socket(UDS Socket或者127.0.0.1的socket)local_server_endpoint_impl // 本地服务端sockettcp_client_endpoint_impl // tcp客户端sockettcp_server_endpoint_impl // tcp服务端socketudp_client_endpoint_impl // udp客户端socketudp_server_endpoint_impl // udp服务端socket
endpoint
endpoint类是上面提到的各种endpoint的父类,其定义了endpoint的接口
class endpoint {
public:// 主要接口如下,略去了一部分接口virtual void start() = 0;virtual void stop() = 0;virtual bool send(const byte_t *_data, uint32_t _size) = 0;virtual bool send_to(const std::shared_ptr<endpoint_definition> _target,const byte_t *_data, uint32_t _size) = 0;virtual void receive() = 0;virtual bool is_reliable() const = 0;virtual bool is_local() const = 0;virtual void restart(bool _force = false) = 0;virtual void register_error_handler(error_handler_t _error) = 0;
};
从endpoint类派生成client_endpoint以及server_endpoint类,分别用于定义客户端socket以及服务端socket的接口
class client_endpoint : public virtual endpoint {
public:virtual ~client_endpoint() {}virtual bool get_remote_address(boost::asio::ip::address &_address) const = 0;virtual std::uint16_t get_remote_port() const = 0;
};
class server_endpoint_impl: public endpoint_impl<Protocol>,public std::enable_shared_from_this<server_endpoint_impl<Protocol> > {
public:// 主要接口如下,略去了一部分接口void restart(bool _force);bool is_established() const;bool send(const uint8_t *_data, uint32_t _size);virtual void stop();void connect_cbk(boost::system::error_code const &_error); void send_cbk(const queue_iterator_type _queue_iterator,boost::system::error_code const &_error, std::size_t _bytes);void flush_cbk(endpoint_type _target,const std::shared_ptr<train>& _train,const boost::system::error_code &_error_code);
};
最后,从client_endpoint以及server_endpoint类,根据实际通信的方式(tcp/udp/local),派生出总共六种具体的endpoint类(local_client_endpoint,local_server_endpoint,tcp_client_endpoint,tcp_server_endpoint,udp_client_endpoint,udp_server_endpoint),每一种具体的endpoint类中根据协议的不同使用boost的asio创建对应的socket,完成通信功能。

endpoint_manager
endpoint_manager用于管理各种endpoint,包括创建,删除,查询等常见操作。endpoint_manager的类结构如下图:

endpoint_host是一个接口,表示endpoint的容器应该实现那些接口函数,这些接口用于让外界获取容器内的endpoint的状态变化(endpoint连接成功,发生错误,断开连接等),也可以获取某个endpoint属于哪个vsomeip应用(获取clientid),释放某个endpoint占用的端口(只针对非local类型的endpoint)。
从endpoint_manage_base的接口可以看出其主要负责管理local_endpoint,包括创建local_client_endpoint(create_local_unlocked接口内实现),创建local_server_endpoint(create_local接口实现)等。
local_endpoint主要用于在同一主机内的不同someip应用间通信,也包括someip应用和routingmanager的通信的,这些都是依赖local_endpoint的。
对于windows系统平台,local_endpoint是通过tcp传输类型的socket实现的,其他平台是通过boost::asio::local::stream_protocol_ext::endpoint来实现的。
endpoint_manager_impl则是负责管理费local_endpoint类型的其他endpoint(tcp/udp),同时,如果开启了SOMEIP的SD功能(ServiceDiscovery),则需要依赖组播通信,此时还会涉及到multicast_endpoint的管理。这些都是由endpoint_manager_impl来实现的。
使用场景
创建manager:
endpoint_manager_base:
对于someip应用来说,如果其没有承担routingmanager的角色,那么也就不需要和其他主机上的someip应用以及其他主机上的routingmanager直接打交道,可以只依赖local_endpoint就完成功能(和其主机的通信交给routingmanager来完成)
因此,这些someip应用只需要routingmanagerproxy既可(因为不是routingmanager应用,不需要创建routingmanagerimpl),而endpoint_manager_base的实例也就在routingmanagerproxy中创建,主要负责和同主机内的其他someip应用以及routingmanager应用通信。
void routing_manager_proxy::init() {routing_manager_base::init(std::make_shared<endpoint_manager_base>(this, io_, configuration_));{std::lock_guard<std::mutex> its_lock(sender_mutex_);sender_ = ep_mgr_->create_local(VSOMEIP_ROUTING_CLIENT);}
}
endpoint_manager_impl:
对于承担了routingmanager功能的someip应用,其需要承担和其他主机的通信,因此需要依赖endpoint_manager_impl创建和管理各个TCP/UDP类型的endpoint。
routing_manager_impl::routing_manager_impl(routing_manager_host *_host) :routing_manager_base(_host),...ep_mgr_impl_(std::make_shared<endpoint_manager_impl>(this, io_, configuration_)),...
创建endpoint:
相关文章:
vsomeip用到的socket
概述: vsomeip用到的socket的代码全部都在implementation\endpoints目录下面,主要分布在下面六个endpoint类中: local_client_endpoint_impl // 本地客户端socket(UDS Socket或者127.0.0.1的socket)local_server…...
MFC有三个选项:MFC ActiveX控件、MFC应用程序、MFC DLL,如何选择?
深耕AI:互联网行业 算法研发工程师 目录 MFC ActiveX 控件 控件的类型 标准控件 自定义控件 ActiveX控件 MFC ActiveX控件 标准/自定义控件 MFC ActiveX控件分类 3种MFC如何选择? MFC ActiveX控件 MFC 应用程序 MFC DLL 总结 举例说明…...
边缘概率 | 条件概率
关于什么是边缘概率分布和条件概率分布,在理论上,我自己也还没有理解,那么现在就根据我学习到的理解方式来记录一下,有错误指出,请大家指正!!! 例如,一个箱子里有十个乒乓…...
深入浅出:现代JavaScript开发者必知必会的Web性能优化技巧
亲爱的读者们,欢迎来到本期博客。今天,我们将深入探讨JavaScript开发者在日常工作中如何提升Web性能。在快节奏的Web开发世界中,性能优化至关重要。本文将分享一些实用技巧,帮助你构建快速、高效的Web应用。 1. 使用CDN加速资源加…...
【S32K3 RTD LLD篇5】K344 ADC SW+HW trigger
【S32K3 RTD LLD篇5】K344 ADC SWHW trigger 一,文档简介二,ADC SW HW 触发2.1 软硬件平台2.2 SWADC 软件触发2.3 SWBCTUADC 软件BCTU触发2.4 PITTRIGMUXADC 硬件PIT TRIGUMX触发2.5 EMIOSBCTUHWADC硬件EMIOS BCTU触发2.6 EMIOSBCTUHW LISTADC硬件EMIOS …...
TransFormer 视频笔记
TransFormer BasicsAttention单头注意力 single head attentionQ: query 查寻矩阵 128*12288K key matrix 128*12288SoftMax 归一 Value matrix 12288*12288 MLP Bas…...
前端的混合全栈之路Meteor篇(三):发布订阅示例代码及如何将Meteor的响应数据映射到vue3的reactive系统
Meteor 3.0 是一个功能强大的全栈 JavaScript 框架,特别适合实时应用程序的开发。它的核心机制之一就包括发布-订阅(Publish-Subscribe)模型,它允许服务器端发布数据,客户端订阅并实时更新。本文将介绍如何在 Meteor 3…...
自动驾驶系列—颠覆未来驾驶:深入解析自动驾驶线控转向系统技术
🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…...
Webstorm 中对 Node.js 后端项目进行断点调试
首先,肯定需要有一个启动服务器的命令脚本。 然后,写一个 debug 的配置: 然后,debug 模式 启动项目和 启动调试服务: 最后,发送请求,即可调试: 这几个关键按钮含义: 重启…...
VUE前后端分离毕业设计题目项目有哪些,VUE程序开发常见毕业论文设计推荐
目录 0 为什么选择Vue.js 1 Vue.js 的主要特点 2 前后端分离毕业设计项目推荐 3 后端推荐 4 总结 0 为什么选择Vue.js 使用Vue.js开发计算机毕业设计是一个很好的选择,因为它不仅具有现代前端框架的所有优点,还能让你专注于构建高性能、高可用性的W…...
一、Spring Boot集成Spring Security之自动装配
Spring Boot集成Spring Security之自动装配介绍 一、实现功能及软件版本说明二、创建Spring Boot项目三、查看自动装配配置类四、自动装配配置类之SecurityAutoConfiguration1、SecurityAutoConfiguration部分源码2、主要作用3、SpringBootWebSecurityConfiguration3.1、Spring…...
计数相关的题 Python 力扣
2284. 最多单词数的发件人 给你一个聊天记录,共包含 n 条信息。给你两个字符串数组 messages 和 senders ,其中 messages[i] 是 senders[i] 发出的一条 信息 。 一条 信息 是若干用单个空格连接的 单词 ,信息开头和结尾不会有多余空格。发件…...
Express内置的中间件(express.json和express.urlencoded)格式的请求体数据
目录 Express内置的中间件 express.json 中间件的使用 express.urlencoded 中间件的使用 express.urlencoded([options]) 解析req.body的兼容写法 Express内置的中间件 自 Express 4.16.0 版本开始,Express 内置了 3 个常用的中间件,极大的提高了 …...
cmakelist加载Qt模块
Qt编程中,cmakelist会自动添加Core,Gui,Widgets模块,有时需要添加新的Qt的模块。在命令find_package中搜索要新增的模块,在命令target_link_libraries中添加要新增的模块。 比如要使用QUiLoader类,要增加对…...
8-2.Android 任务之 CountDownTimer 编码模板(开启计时器、取消计时器)
一、CountDownTimer 1、概述 CountDownTimer 是 Android 中一个用于执行定时操作的类 CountDownTimer 主要应用于在指定时间段内完成某项任务,或者每隔一段时间触发某项任务 2、使用步骤 创建 CountDownTimer:创建 CountDownTimer 就是创建它的匿名…...
Servlet的生命周期及用户提交表单页面的实现(实验报告)
一、实验目的、要求 1. 掌握Servlet的定义,即Servlet是运行在服务器端的Java程序,用于扩展服务器的功能。 2. 学习和掌握在开发环境中搭建Servlet应用所需的工具,如Tomcat服务器、IDEA等。 二、实验内容 根据本章所学知识,实验…...
【Router】路由功能之IP过滤(IP Filter)功能(基于端口)介绍及实现
IP过滤(IP Filter) IP Filter是一种通过对网络数据包中的 IP 地址进行分析和筛选,以实现对网络流量的控制和管理的技术。 IP过滤(IP Filter)作用 安全防护 可以阻止来自特定 IP 地址或 IP 地址范围的恶意攻击、非法访问等,增强网络的安全性。 流量管理 根据不同的 IP …...
数据结构_2.2、顺序表插入删除查找
1、线性表的顺序存储表示定义: 线性表:是具有相同数据类型的n (n≥0)个数据元素的有限序列 顺序表:用顺序存储的方式实现线性表 顺序存储:把逻辑上相邻的元素存储在物理 位置上也相邻的存储单元中&#…...
嵌入式C语言自我修养:编译链接
源文件生成可执行文件的过程? 源文件经过预处理、编译、汇编、链接生成一个可执行的目标文件。 编译器驱动程序,包括预处理器、编译器、汇编器和链接器。Linux用户可以调用GCC驱动程序来完成整个编译流程。 使用GCC驱动程序将示例程序从ASCII码源文件转换…...
Mac制作Linux操作系统启动盘
前期准备 一个 Mac 电脑 一个 U 盘(8GB 以上) 下载好 Linux 系统镜像(iso 文件) 具体步骤 挂载 U 盘 解挂 U 盘 写系统镜像到 U 盘 完成 一、挂载 U 盘 首先插入 U 盘,打开终端输入下面的命令查看 U 盘是否已经 m…...
TegraRcmGUI终极指南:Windows上最简单的Switch注入工具免费使用教程
TegraRcmGUI终极指南:Windows上最简单的Switch注入工具免费使用教程 【免费下载链接】TegraRcmGUI C GUI for TegraRcmSmash (Fuse Gele exploit for Nintendo Switch) 项目地址: https://gitcode.com/gh_mirrors/te/TegraRcmGUI TegraRcmGUI是一款专为Windo…...
UWB传统厘米级定位 VS 镜像视界AI无感定位|大模型融合视频孪生全面重塑全域空间感知
UWB传统厘米级定位 VS 镜像视界AI无感定位|大模型融合视频孪生全面重塑全域空间感知在全域空间高精度感知产业高速迭代进程中,室内外人员与目标定位技术逐步分化为两大主流发展路径,其一为深耕多年、依托硬件组网实现测距定位的传统UWB厘米级…...
CANN/ops-tensor StreamK矩阵乘后处理块
Block Epilogue StreamK 【免费下载链接】ops-tensor ops-tensor 是 CANN (Compute Architecture for Neural Networks)算子库中提供张量类计算的基础算子库,采用模块化设计,支持灵活的算子开发和管理。 项目地址: https://gitc…...
收藏 | 零基础小白也能看懂:AI大模型应用开发入门指南
文章介绍了AI领域两大门派:传统算法工程师与大模型应用开发工程师。传统算法工程师专注于算法研发,是AI基建者;大模型应用开发工程师则侧重于将现成大模型应用于实际业务场景,是场景魔术师。文章指出,大模型应用开发工…...
数据库与仓储
数据库与仓储 位置:Source/DataBases 项目作用H.DataBases.Share数据库共享代码。H.DataBases.SqliteSqlite 支持。H.DataBases.SqlServerSQL Server 支持。 Repository 相关: H.Extensions.DataBase.Repository H.Presenters.Repository H.Controls.…...
别再用鼠标了!树莓派新手必学的20个命令行操作,5分钟上手
别再用鼠标了!树莓派新手必学的20个命令行操作,5分钟上手 第一次打开树莓派的终端时,那个闪烁的光标是不是让你想起了90年代的黑客电影?别担心,命令行不是程序员的专属工具。就像学骑自行车前总要拆掉辅助轮࿰…...
巴洛克光影建模失败率高达83%?用这7个构图锚点+12组权威艺术史关键词立即逆转
更多请点击: https://kaifayun.com 第一章:巴洛克光影建模的危机本质与历史断层 “巴洛克光影建模”并非真实存在的技术流派,而是对20世纪末至21世纪初三维渲染实践中一种高度装饰化、过度依赖手工打光与物理不一致材质叠加现象的隐喻性指称…...
暗黑破坏神2存档修改器终极指南:告别重复刷装备,5分钟打造完美角色!
暗黑破坏神2存档修改器终极指南:告别重复刷装备,5分钟打造完美角色! 【免费下载链接】diablo_edit Diablo II Character editor. 项目地址: https://gitcode.com/gh_mirrors/di/diablo_edit 你是否厌倦了在暗黑破坏神2中反复刷装备&am…...
Windows 10/11(64位)上安装 WinQSB——无需虚拟机
以下是在 Windows 10/11(64位) 上安装 WinQSB 的完整步骤,无需虚拟机,并安装在 D 盘。原理说明 WinQSB 是一个 16位 Windows 程序,64位 Windows 原生不支持运行它。解决方案是使用 winevdm(otvdm࿰…...
UV-UI框架终极指南:如何快速构建跨平台应用
UV-UI框架终极指南:如何快速构建跨平台应用 【免费下载链接】uv-ui uv-ui 破釜沉舟之兼容vue32、app、h5、小程序等多端基于uni-app和uView2.x的生态框架,支持单独导入,开箱即用,利剑出击。 项目地址: https://gitcode.com/gh_m…...
