2019-05-07 22:19
⁄ 工业·编程
⁄ 共 2165字
消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。
我们来看几个关键点:
消息 消息中间件定义了一个协议(模型),基于该协议可以传递消息
分布式 消息中间件的引入是为了解决分布式系统的问题,对于简单的单应用系统用不着
举例来说,一个常见的最简单的UGC应用,至少包括后端、APP、审核后台、...
Redis, 中间件阅读全文
2019-05-06 22:04
⁄ 工业·编程
⁄ 共 3010字
为什么使用消息队列
先说一下消息队列常见的使用场景吧,其实场景有很多,但是比较核心的有 3 个:解耦、异步、削峰。
解耦
看这么个场景。A 系统发送数据到 BCD 三个系统,通过接口调用发送。如果 E 系统也要这个数据呢?那如果 C 系统现在不需要了呢?A 系统负责人几乎崩溃......
在这个场景中,A 系统跟其它各种乱七八糟的系统严重耦合,A 系统产生一条比较关键的数据,很多系统都需要 A 系统将这个数据发送过来。A 系统要...
中间件, 网络协议阅读全文
2019-05-05 06:52
⁄ 工业·编程
⁄ 共 2126字
1、概述:
lwip是轻量型的TCP/IP实现,只需10几KB的RAM和40几KB的ROM就能够跑起来,适合应用于嵌入式设备的网络通信。有牛人Adam Dunkels发明,提供给用户上那种接口
RAW TCP/IP、Squential API, BSD API(也就是常说的socket编程),前者编程稍微复杂点,协议和应用程序在一个进程里面,但是效率高。中者首先要操作系统的支持,但是一旦实现了操作系统模拟层的实现,编程妥妥的。后者是为了符合人们使用socket编程的习惯而模...
lwip, 网络编程阅读全文
2019-05-04 06:49
⁄ 工业·编程
⁄ 共 16360字
——linux版本: 3.14.38
netlink支持用户进程和内核相互交互(两边都可以主动发起),同时还支持用户进程之间相互交互(虽然这种应用通常都采用unix-sock)
但是有一点需要注意,内核不支持接收netlink组播消息
本文将从用户进程发送一个netlink消息开始,对整个netlink消息通信原理进行展开分析
用户进程一般都通过调用sendmsg来向内核或其他进程发送netlink消息(有关sendmsg系统调用的公用部分代码解析将在另一片文章中展开)
&...
linux编程, netlink, 网络编程阅读全文
2019-05-03 06:41
⁄ 工业·编程
⁄ 共 12226字
——linux版本:3.14.38
目前为止,netlink协议族支持32种(MAX_LINKS)协议类型,其中已经被预定义的有22种。
在实际项目中,如果有定制化的需求时,最好不要去占用剩下的暂未定义的协议类型ID号,而是使用预定义的通用netlink协议类型NETLINK_GENERIC来进行扩展。
LINUX中跟netlink相关的核心代码位于net/netlink目录中,其中核心头文件主要有3个(这些都是所有协议类型的netlink共享的):
...
linux编程, netlink, 网络编程阅读全文
2019-05-02 06:36
⁄ 工业·编程
⁄ 共 6298字
内核版本:3.14.38
netlink是一种用于内核态和用户态进程之间进行数据传输的特殊的IPC机制。
特点:
1) 用户态采用socket风格的API
2) 除了预定义的协议类型之外,支持自定义协议类型
3) 异步通讯
4) 支持消息组播
4) 全双工(特别是支持内核主动发起会话)
netlink涉及的数据结构:
1) netlink地址...
linux编程, netlink, 网络编程阅读全文
2019-05-01 06:40
⁄ 工业·编程
⁄ 共 3552字
五十一、通过定义类为final来阻止继承
有时我们会定义这样一种类,我们不希望其他类继承它,或者不想考虑它是否适合作为一个基类。为了实现这一目的,C++11新标准提供了一种防止继承的方法,即在类名后面跟一个关键字final:
class NoDerived final {/**/}; //NoDerived不能作为基类
五十二、虚函数的override和final指示符
在c++11中我们可以使用override关键字来说明派生类中的虚函数。这么做的好处是在使得程序员的意图更加...
C++11阅读全文
2019-04-30 06:33
⁄ 工业·编程
⁄ 共 2587字
四十一、auto不能用于分配数组
虽然我们用空括号对数组中的元素进行值初始化,但不能在括号中给出初始化器,这意味着不能用auto分配数组。
四十二、动态分配数组的列表初始化
在新标准中,我们可以提供一个元素初始化器的花括号列表:
//10个int分别用列表中对应的初始化器初始化
int *pia = new int[10]{0,1,2,3,4,5,6,7,8,9};
//10个string,前4个用给定的初始化器初始化,剩余的进行值初始化
string *pia3 = new string[10]{...
C++11阅读全文
2019-04-29 06:29
⁄ 工业·编程
⁄ 共 2937字
三十一、容器的非成员函数swap
在新标准库中,容器既提供成员函数版本的swap,也提供非成员版本的swap,而早期标准库版本只提供成员函数版本的swap。非成员版本的swap在泛形编程中是非常重要的,统一使用非成员版本的swap是一个好习惯。
三十二、容器insert成员的返回类型
在新标准下,接受元素个数或范围的insert版本返回指向第一个新加入元素的迭代器。(在旧版本中,这些操作返回void。)如果范围为空,不插入任何元素,insert...
C++11阅读全文
2019-04-28 06:20
⁄ 工业·编程
⁄ 共 2816字
二十一、使用decltype简化返回类型定义
如果我们知道函数返回的指针指向哪个数组,就可以使用decltype关键字声明返回类型。例如,下面的函数返回一个指针,该指针根据参数i的不同指向两个已知数组中的某一个
int odd[] = {1,3,5,7,9};
int even[] = {0,2,4,6,8};
//返回一个指针,该指针指向含有5个整数的数组
decltype(odd) *arrPtr(int i){
return (i % 2) ? &odd : &even; // 返回一个指向数组的指针
}
arrPtr使用关...
C++11阅读全文