-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.xml
More file actions
54 lines (54 loc) · 10.8 KB
/
Copy pathindex.xml
File metadata and controls
54 lines (54 loc) · 10.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>脑洞大开</title>
<link>/</link>
<description>Recent content on 脑洞大开</description>
<generator>Hugo -- gohugo.io</generator>
<language>en-us</language>
<lastBuildDate>Mon, 18 Dec 2023 14:31:19 +0800</lastBuildDate>
<atom:link href="/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Socket</title>
<link>/posts/socket/</link>
<pubDate>Mon, 18 Dec 2023 14:31:19 +0800</pubDate>
<guid>/posts/socket/</guid>
<description>Socket出现的背景 Socket(套接字)是一种用于实现网络通信的编程接口(API),它提供了一种标准化的方式,使得不同操作系统和编程语言之间的应用程序能够相互通信。Socket最初是在BSD(Berkeley Software Distribution)操作系统中开发出来的,目的是为了实现在不同主机之间进行进程间通信。BSD是由加州大学伯克利分校开发的一个Unix操作系统的分支,它对Socket的定义和实现成为了事实上的标准。后来,由于互联网的发展,Socket被广泛应用于网络编程中。 在早期的计算机网络中,通信使用的是不同的协议,这些协议之间缺乏标准化的接口,使得应用程序的编写和移植变得非常困难。为了解决这个问题,一些计算机科学家开始研究如何定义一种标准的通信接口,以便不同的计算机之间能够进行通信。Socket就是在这个背景下诞生的,它提供了一种可移植、可扩展、易于使用的接口,使得应用程序能够在不同的操作系统和计算机之间进行通信。 随着互联网的发展,Socket成为了网络编程中不可或缺的一部分。它被广泛应用于各种网络应用程序中,如Web服务器、电子邮件客户端、聊天程序等。同时,随着计算机硬件和网络技术的不断发展,Socket也不断更新和完善,以适应新的应用场景和需求。
Socket解决的问题 Socket通信主要是为了解决计算机网络中的进程间通信问题。在网络编程中,有两个进程需要进行通信才能完成特定的任务,这两个进程可能运行在不同的计算机上,也可能运行在同一台计算机上的不同进程中。Socket提供了一种标准化的接口,使得这些进程能够在网络中进行数据交换和通信。具体来说,Socket通信可以解决以下几个方面的问题:
进程间通信:在同一台计算机上,不同的进程之间需要进行通信,Socket提供了一种标准化的接口,使得进程之间可以通过网络进行通信。 跨平台通信:不同的计算机、操作系统和编程语言之间需要进行通信,Socket提供了一种可移植的接口,使得应用程序可以在不同的平台上运行并进行通信。 网络通信安全性:网络通信中存在着信息泄露、数据篡改、拒绝服务攻击等安全问题,Socket可以通过加密、身份认证、防火墙等方式提高通信的安全性。 通信协议:Socket提供了一种灵活的通信协议,可以根据需要选择不同的协议来满足特定的通信需求,如TCP、UDP等协议。 </description>
</item>
<item>
<title>D-Bus</title>
<link>/posts/d-bus/</link>
<pubDate>Sat, 16 Dec 2023 14:49:31 +0800</pubDate>
<guid>/posts/d-bus/</guid>
<description>D-Bus(Desktop-Bus)是一个IPC(Inter-Process Communication)通信机制,已经被各主流Linux发行版采用。其技术规范(specification)最早发布于2006年。相较于传统意义上的IPC机制(例如PIPE/FIFO/Socket/共享内存/SysvIpc),D-Bus提供了更高层次的抽象:1
方法调用(Method Call):用来实现跨进程的方法(函数)调用,配合代码生成工具,可以做到让进程间的函数调用和普通的函数调用几无区别 信号(Signal):发布订阅(Pub-Sub)模式的通信机制,发送进程注册并发送(广播)信号,接收进程订阅自己感兴趣的信号。 属性(Property):可类比C++类中成员变量的Getter-Setter,如果进程A提供了一个属性,那么其他进程可以通过D-Bus来读取、写入该属性。 D-Bus制定技术规范的同时,也提供了一个参考实现,主要包括2部分:
libdbus,进程可以通过libdbus提供的函数来接入到D-Bus,例如其会提供注册方法、调用方法、发布信号等等函数。根据官方手册友情提示: dbus-daemon,D-Bus的中心节点,实际上进程A和进程B通过D-Bus通信时,并不是通过Socket直接连接,而是进程A &lt;-&gt; dbus-daemon &lt;-&gt; B。dbus-daemon提供服务注册、消息路由等功能。 D-BUS daemon总线守护 基于libdbus的消息总线守护进程,可同时与多个应用程序相连,并能把来自一个应用程序的消息路由到0或者多个其他程序。 从一个进程传递消息给另外一个进程,如果有很多applications链接到这个通道上,这个daemon进程就会把消息转发给这些链接的所有程序。 D-Bus是点对点通信,经过daemon抽象后,并由他寻址和发送消息,每个进程不关心消息发给哪个进程。 发送消息的过程:
创建和发送消息给后台dbus-daemon进程,这个过程中会有两个上下文的切换。 dbus-daemon进程会处理该消息,并转发给目标进程,引起上下文的切换目标程序接收到消息。 Attention: 传递大量的数据,D-Bus不建议,建议共享内存。
https://zhuanlan.zhihu.com/p/533845321&#160;&#x21a9;&#xfe0e;</description>
</item>
<item>
<title>RPC</title>
<link>/posts/rpc/</link>
<pubDate>Sat, 16 Dec 2023 13:42:53 +0800</pubDate>
<guid>/posts/rpc/</guid>
<description>RPC全称为远程过程调用(Remote Procedure Call),它是一种计算机通信协议,允许一个计算机程序调用另一个计算机上的子程序,而无需了解底层网络细节。通过RPC,一个计算机程序可以像调用本地程序一样调用远程程序,使得分布式应用程序的开发更加简单和高效。1
在RPC中,调用者发送一个请求消息到远程主机,远程主机收到请求后执行相应的程序,并将结果返回给调用者。RPC通过序列化数据传输协议将数据打包并进行网络传输,常见的序列化协议有JSON、Protobuf、Thrift等。RPC通常使用TCP或UDP作为底层传输协议。
RPC常用于分布式系统中,例如云计算、微服务架构、分布式数据库等,它可以让不同的服务之间进行远程调用,从而实现分布式系统的协作。例如:
微服务架构:微服务架构中的各个服务通常都是通过RPC进行通信,实现服务之间的远程调用和数据传输。
云计算:云计算中的各种服务也需要通过RPC进行通信,例如计算、存储、网络等服务。
分布式数据库:分布式数据库中的各个节点之间需要进行数据同步和通信,也可以通过RPC实现。
消息队列:消息队列中的生产者和消费者之间也可以通过RPC进行通信,实现高效的消息传输和处理。
为什么需要RPC RPC可以用HTTP协议实现,并且用HTTP是建立在 TCP 之上最广泛使用的 RPC,但是互联网公司往往用自己的私有协议,比如鹅厂的JCE协议,私有协议不具备通用性为什么还要用呢?因为相比于HTTP协议,RPC采用二进制字节码传输,更加高效也更加安全。 现在业界提倡“微服务“的概念,而服务之间通信目前有两种方式,RPC就是其中一种。RPC可以保证不同服务之间的互相调用。即使是跨语言跨平台也不是问题,让构建分布式系统更加容易。 RPC框架都会有服务降级、流量控制的功能,保证服务的高可用。 https://baijiahao.baidu.com/s?id=1760709599822153631&amp;wfr=spider&amp;for=pc&#160;&#x21a9;&#xfe0e;</description>
</item>
<item>
<title>gRpc</title>
<link>/posts/grpc/</link>
<pubDate>Fri, 15 Dec 2023 14:39:15 +0800</pubDate>
<guid>/posts/grpc/</guid>
<description>介绍 gRPC 是开源的远程过程调用(RPC)框架,可在任何环境运行。使用 gRPC 可以有效地连接数据中心内和跨数据中心的服务,gRPC 具有可插拔的负载均衡、追踪、健康检查和身份验证支持。它也适用于将设备、移动应用程序和浏览器连接到后端服务的分布式计算的最后一英里。
gRPC 具有如下特点:
简单的服务定义:使用 Protocol Buffers(强大的二进制序列化工具集和语言)定义服务 快速开始和伸缩:使用单行代码安装运行时和开发环境,还可以使用框架扩展到每秒数百万个 RPC 适用于多种语言和平台:自动地为服务生成各种语言和平台的客户端和服务端存根 双向流和集成认证:双向流和完全集成的基于 HTTP/2 传输的可插拔认证 gRPC 使用 Protocol Buffers 作为它的接口定义语言(Interface Definition Language,IDL),及底层的消息交换格式。</description>
</item>
<item>
<title>description</title>
<link>/myself/</link>
<pubDate>Wed, 13 Dec 2023 17:59:53 +0800</pubDate>
<guid>/myself/</guid>
<description>MySelf 我是一个脑洞大开的人,老是想着做很高级的事情,其实自己连小事情都做不好:smile: 我最近老想过去的事情,感觉自己很傻:smile: If you want to chat with me, email to me:smile: easytojoin@163.com 人有时候还是要坚持自我的,要是轻易放弃的话,岂不是很后悔吗?
sequenceDiagram
participant Alice
participant Bob
Alice-&gt;&gt;John: Hello John, how are you?
loop Healthcheck
John-&gt;&gt;John: Fight against hypochondria
end
Note right of John: Rational thoughts &lt;br/&gt;prevail!
John--&gt;&gt;Alice: Great!
John-&gt;&gt;Bob: How about you?
Bob--&gt;&gt;John: Jolly good! </description>
</item>
<item>
<title>Skil</title>
<link>/posts/skil/</link>
<pubDate>Wed, 13 Dec 2023 17:59:53 +0800</pubDate>
<guid>/posts/skil/</guid>
<description> C++11,C++20 Go Python Java Rust OOP,Design pattern Socket,TCP,UDP BLE TLS, MQTT, COAP, HTTPS P2P/PCDN RTP/RTCP/RTMP/RTSP/DASH/FLV SIP PCM, SILK, iLBC, Opus, VP8 H264/AAC/H265/MPEG4 HLS/FLV/MP4 Quic WebRTC ffmpeg Nginx, mysql, memcached, thrift, grpc Redis, Elasticsearch Kafka, RabbitMQ faiss Tair, Lucene, mesos Docker, K8S, ELK TensorFlow libevent Spark, Hive, Flink, hbase, ClickHouse, Doris, Velox, storm Hadoop MapReduce大数据处理 HDFS/Ceph/GlusterFS TEE技术(Intel SGX/Intel TDX/AMD SEV/GPU TEE) CUDA TensorFlow, PyTorch </description>
</item>
</channel>
</rss>