什么是IPC,如何进行进程间通信;正向代理,反向代理 ;什么是粘包
什么是IPC,如何进行进程间通信
# 线程间通信:https://zhuanlan.zhihu.com/p/489305763
-共享内存(共享变量)---》线程间变量是共享的---》lock---》临界区---》数据错乱---》互斥锁---》死锁问题(科学家吃面)---》递归锁(可重入锁)---》各种各样的锁
-IPC:Inter-Process Communication,进程间通信
-两种情况:
-同一台机器上的两个进程通信
-不同机器上的两个进程进行通信
-如何通信:
-如果都是python写的,同一台机器上的进程可以用queue做进程间通信
-消息队列:redis就可以做消息队列,RabbitMQ,kafka
-socket套接字:展现形式:
1 服务和服务之间通过接口调用(http调用)
2 RPC调用:远程过程调用
3 socket客户端和服务端
正向代理,反向代理
https://www.cnblogs.com/liuqingzheng/p/10521675.html
代理其实就是一个中介,A和B本来可以直连,中间插入一个C,C就是中介
-正向代理:代理的是客户端 VPN 爬虫代理池
-反向代理:代理的是服务端 nginx
# 看一下:https://blog.csdn.net/lsc_2019/article/details/124630025
# 正向代理(Forward Proxy)
正向代理是位于客户端和目标服务器之间的代理服务器。当客户端发出请求时,请求首先发送到正向代理服务器,然后由代理服务器转发请求给目标服务器。这种情况下,目标服务器不知道请求来自于哪个客户端,而只知道请求来自代理服务器。
主要用途包括:
- 为内部网络提供访问外部网络的权限控制,例如公司内部的员工访问互联网。
- 保护客户端的隐私,因为目标服务器只知道代理服务器的IP地址而不知道实际客户端的IP地址。
- 加速访问,通过缓存常用资源。
# 反向代理(Reverse Proxy)
反向代理是位于目标服务器和客户端之间的代理服务器。当客户端发出请求时,请求首先发送到反向代理服务器,然后由代理服务器决定将请求转发给哪个后端目标服务器。这种情况下,客户端不知道后端目标服务器的信息。
主要用途包括:
- 提供负载均衡,将客户端的请求分发到多个后端服务器,以提高性能和可靠性。
- 隐藏后端服务器的结构和信息,提高安全性。
- 缓存内容,以减轻后端服务器的负载。
- SSL终结,将SSL/TLS握手交给代理服务器处理,减轻后端服务器的计算负担。
什么是粘(nian)包
# 只存在于基于TCP协议的套接字编程中的现象
-因为TCP是流式协议,tcp客户端发送的多个数据包就会像水流一样流向TCP服务端,多个数据包就会'粘'在一起,区分不开是几个数据包,造成了粘包现象。
# 原因
1.缓冲区: 发送方将多个数据包写入缓冲区,而接收方并不总是能够立即读取缓冲区中的数据,这可能导致多个数据包一起发送给接收方。
2.优化: 操作系统或网络设备可能会对数据进行优化,将多个小的数据包合并为一个较大的数据包,从而提高传输效率。这可能导致接收方无法正确地分辨每个原始数据包。
3.并发: 在多线程或多进程的情况下,多个发送者同时发送数据,接收者可能会在接收数据时混淆数据包的边界。
# 解决方法
-1 每个包设置结束标志 http协议采用这种 /r/n/r/n
-2 每个包设置固定大小的头,头中包含包的大小