IE盒子

搜索
楼主: 彩色风

GRPC-C++源码分析(一)--网络模型

[复制链接]

1

主题

5

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2023-3-4 08:23:39 | 显示全部楼层
应该是多listenfd 复用同一个端口,放到多epoll中监听吧?
回复

使用道具 举报

3

主题

10

帖子

18

积分

新手上路

Rank: 1

积分
18
发表于 2023-3-4 08:24:23 | 显示全部楼层
这要看是否enable REUSEPORT了
回复

使用道具 举报

2

主题

4

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2023-3-4 08:25:07 | 显示全部楼层
应该这么理解,单纯的socket当然传输效率高。但是重点是实际使用的时候,能够只考虑传输效率么。比如想要实现流式,比如想要丰富的权限控制,那么必须有额外的处理层,那就有一个问题,是使用现用的,还是自己造一个。gRPC选择了使用http2. 估计就是这样
回复

使用道具 举报

1

主题

7

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2023-3-4 08:25:14 | 显示全部楼层
如果没搞错,这是典型的reactor结构,一个主线程负责监听是否有新的连接事件,如果有,通过轮询或者其他合理的负载分配方法,通过管道或者其他IPC方式,将这个信息传递给被选中的某个子线程,子线程通过accept调用从而获取新的连接,然后将该连接在子线程中的epoll事件循环中维护
回复

使用道具 举报

0

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2023-3-4 08:26:03 | 显示全部楼层
大佬,你的图用什么画的
回复

使用道具 举报

3

主题

11

帖子

19

积分

新手上路

Rank: 1

积分
19
发表于 2023-3-4 08:26:30 | 显示全部楼层
epoll是I/O多路复用,跟协议有啥关系。只要进行网络I/O,就可以用epoll+非阻塞I/O(相当于是把阻塞提前)来减少阻塞时间,提高响应时间以及CPU利用率。epoll(7) - Linux manual手册
回复

使用道具 举报

5

主题

16

帖子

27

积分

新手上路

Rank: 1

积分
27
发表于 2023-3-4 08:26:51 | 显示全部楼层
gRPC还包括序列化/反序列化,说白了就是两头约定好消息格式,这样互相能看懂。你纯手写的Socket编程不还得自己做这事吗?再者就是gRPC的序列化/反序列化用的是Protobuf,了解一下你就知道它有多牛了(GitHub - Protocol Buffers - Google's data interchange format)。
回复

使用道具 举报

1

主题

6

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2023-3-4 08:27:22 | 显示全部楼层
Socket只是一种连接模式,HTTP2是一种应用层协议。如果你做过Linux网络编程,用过SetSocketOption,那你就会明白,你在用Socket的时候可以自定义很多选项,包括选择网络层和传输层的协议(GitHub - NGINX)。在Linux上,不管啥应用层协议,其底层不都是Socket吗?你说Socket高效是指啥?发一个消息对方很快能收到吗?那双方的数据格式要不要约定好?这跟序列化/反序列化本质上是不是一样的?RPC是远程过程调用,解决的是跨机IPC问题。把一个远程的进程抽象成本地的进程用,势必要做严格的数据格式约定。如果是单机IPC,那肯定用不着RPC,高效的方案多了去了,且各有特点。
回复

使用道具 举报

4

主题

8

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2023-3-4 08:27:44 | 显示全部楼层
其实意思是 如果不用HTTP2,在socket上 裸奔protobuf岂不是速度更快
回复

使用道具 举报

3

主题

10

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2023-3-4 08:27:51 | 显示全部楼层
这个上面的bingo回答了[捂脸]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表