网络知识点总结

HTTPS是HTTP的安全版本,有加密的

RPC(Remote Procedure Call)
远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解 底层网络技术的协议。比如两个不同的服务A,B部署在两台不同的机器上,那么服务 A 如果想要调用服务 B 中的某个 方法该怎么办呢?使用 HTTP请求 当然可以,但是可能会比较慢而且一些优化做的并不好。 RPC 的出现就是为了解 决这个问题。
在这里插入图片描述1. 服务消费方(client)以本地调用方式调用服务;
2. client stub接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体; 3. client stub找到服务地址,并将消息发送到服务端; 4. server stub收到消息后进行解码; 5. server stub根据解码结果调用本地的服务; 6. 本地服务执行并将结果返回给server stub; 7. server stub将返回结果打包成消息并发送至消费方; 8. client stub接收到消息,并进行解码; 9. 服务消费方得到终结果。

HTTP:
HTTP协议通信的网络应用只能由客户端主动发起,服务端被动响应。

HTTP和RPC的区别:
RPC(基于HTTP或TCP连接)主要用于公司内部的服务调用,性能消耗低,传输效率高,服务治理方便。
HTTP主要用于对外的异构环境,浏览器接口调用,APP接口调用,第三方接口调用等。

服务端推送
客户端长轮询:客户端起一个定时器,定时向服务端发送HTTP请求查询最新数据,以此实现客户端与服务端的数据保持一致。(好处是实现简单,坏处就是性能损耗过高,而且数据更新也不及时,如果数据没有更新频繁,会做很多无用功。)

WebSocket:是一种在单个TCP连接上进行全双工通讯的协议,其使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。WebSocket使用和 HTTP 相同的 TCP 端口,可以绕过大多数防火墙的限制。默认情况下,WebSocket协议使用80端口;运行在TLS之上时,默认使用443端口。支持服务端推送(实时从服务端推送更新消息给客户端)。但是使用WebSocket服务端与客户端还要关注心跳检测、自动重连等细节。

SocketIO:是一套支持实时、双向、事件驱动的服务端与客户端通信的解决方案,或者说规范。其基于WebSocket协议,天生支持服务端推送。此外,其还封装了连接检测、自动重连等细节,并且支持命名空间与群聊。不仅如此,它还支持基于反向代理来搭建服务器集群(搭建支持服务端推送的集群)。
服务端-java:https://github.com/mrniko/netty-socketio
客户端-java:https://github.com/socketio/socket.io-client-java
服务端maven

<dependency>
<groupId>com.corundumstudio.socketio</groupId>
<artifactId>netty-socketio</artifactId>
<version>1.7.17</version>
</dependency>

服务端SocketIO代码

public class Server {

public static void main(String[] args){
    Configuration config = new Configuration();
    config.setPort(1337);//设置监听端口
final SocketConfig socketConfig = new SocketConfig();
    socketConfig.setReuseAddress(true);//tcp参数
    config.setSocketConfig(socketConfig);
    SocketIOServer server = new SocketIOServer(config);
    server.addConnectListener(new ConnectListener() {
@Override
public void onConnect(SocketIOClient socketIOClient) {
        System.out.println(socketIOClient.getSessionId()+" has connected.");
      }
    });
    server.start();
  }
}

客户端maven

<groupId>io.socket</groupId>
<artifactId>socket.io-client</artifactId>
<version>1.0.0</version>
</dependency>

客户端SocketIO代码

public class Client {
public static void main(String[] args) throws Exception{
final Socket socket = IO.socket(**"http://localhost:1337"**);//ip地址和端口
    socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
@Override
public void call(Object... args) {
        System.out.println("I have connected to server.");
      }
    });
    socket.connect();
  }
}

如果再客户端的ip地址改为WebSocket的地址:ws://localhost:1337,会出现未知异常。
所以客户端建立连接的时候只能先使用HTTP协议,再升级到WebSocket协议进行通信。

通信网络:
通信延迟主要是指:处理延迟和网络传输延迟。处理延迟开销指的就是消息在发送和接收阶段的处理时间。网络传输延迟指的就是消息在发送和接收方的网络传输时延。

高性能网络通信历史发展主要有以下四个方面:高性能网络通信历史发展主要有以下四个方面:TCP Offloading Engine(TOE)、User-Net Networking(U-Net)、Virtual interface Architecture(VIA)、Remote Direct Memroy Access(RDMA)。U-Net是第一个跨过内核网络通信的模式之一。VIA首次提出了标准化user-level的网络通信模式,其次它组合了U-Net接口和远程DMA设备。RDMA就是现代化高性能网络通信技术。

TOE
将数据包处理的工作,从主机处理器的工作转移到网卡上。
User-Net Networking
设计目标是将协议处理部分移动到用户空间去处理。这种方式避免了用户空间将数据移动和复制到内核空间的开销。它的设计宗旨就是移动整个协议栈到用户空间中去,并且从数据通信路径中彻底删除内核。这种设计带来了高性能的提升和高灵活性的提升。
RDMA(远程直接内存访问)
为了解决网络传输中服务器端数据处理的延迟而产生的
Remote:数据通过网络与远程机器间进行数据传输
Direct:没有内核的参与,有关发送传输的所有内容都卸载到网卡上
Memory:在用户空间虚拟内存与RNIC网卡直接进行数据传输不涉及到系统内核,没有额外的数据移动和复制
Access:send、receive、read、write、atomic操作
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_40805537/article/details/88360887
今日推荐