通信协议 - 常见软件/服务通信协议 - 学习/实践

1.应用场景

主要用于学习那些日常开发中,经常听到用到的软件/服务通信协议,弄清楚协议,通信协议有哪些,

本质是什么,以及各自的应用场景。

2.学习/操作

查看源图像

1.文档阅读

08 | 数据库优化方案(一):查询请求增加时,如何做主从分离?-极客时间

2.整理输出

作为程序开发人员,日常开发中,听到的和用到的协议有很多。

从网络模型,四层或者七层OSI模型来划分。

他们会属于不同的层级。

协议有很多,有些已经不用了,废弃了,有些还是一如既往地发挥作用,有些也在制定当中, 但是不管如何,有些面对他们,总会感到陌生,甚至有点不知所措,他们是什么,发挥什么作用,如何使用他们,这都是问题,但是我们能做的也许就只有,去了解,学习他们,然后使用他们,发挥他们的价值,解答内心的疑问。-- 个人想法,有时候就是想到什么写什么。 

TCP 网络通信时需要设定通信协议。

常见的 TCP 通用网络通信协议有:「即基于TCP的协议」

HTTPHTTPSFTPSMTPPOP3IMAPSSHRedisMemcacheMySQL 。

但是协议不单单只有涉及到网络通信的协议,还有其他协议,比如文件协议等。

比如:

File协议:本地文件传输协议

协议分类

分类方式一(两类)

二进制通信协议, 文本通信协议

分类二(从网络模型,四层或者七层OSI模型来划分)

这里主要是常用的协议

2.1 HTTP / HTTPS

这个暂时不多说,是我们最常见的应用层网络通信协议

HTTPS则是原有基础上,传输层TCP与应用层HTTP之间添加的安全层,

在会话层&表现层中做了安全加密。

网络/Network - 会话层&表现层 - HTTPS协议[SSL/TLS] - 学习/实践_穿素白衫的中少年的博客-CSDN博客

2.2 MySQL通信协议

通信协议 - MySQL - 通信协议 - 学习/实践_穿素白衫的少年的博客-CSDN博客

2.3 Redis通信协议

Redis协议,也称为RESP(Redis Serialization Protocol),是Redis客户端和服务器之间进行通信的二进制安全协议。它是一种简单、轻量级的协议,以文本格式进行数据传输。

Redis协议的特点包括:

  1. 简单的请求-响应模型:客户端发送命令请求给Redis服务器,服务器响应并返回结果。

  2. 可读性强:Redis协议使用文本格式,易于阅读和调试。命令和参数之间使用简单字符串表示。

  3. 支持多种数据类型:Redis协议支持多种数据类型,包括字符串、哈希、列表、集合、有序集合等。

  4. 命令和参数的组织:Redis协议使用数组的形式组织命令和参数。每个请求由多个参数组成,第一个参数是命令名称,后续参数是命令的参数值。

  5. 客户端主动发起请求:Redis协议中,客户端主动发起请求,服务器被动响应。

  6. 请求和响应的分割:Redis协议使用\r\n(CRLF)作为请求和响应之间的分隔符。

下面是一个使用Redis协议的示例:

*3\r\n
$3\r\n
SET\r\n
$5\r\n
mykey\r\n
$7\r\n
myvalue\r\n

 

在上述示例中,客户端发送了一个SET命令,设置键名为"mykey",键值为"myvalue"。

Redis协议是非常简单和高效的,它使得Redis客户端能够与Redis服务器进行快速的数据交换和通信。同时,Redis协议的简洁性也为开发者提供了实现自定义Redis客户端的便利性。

redis协议中的客户端是哪些? redis-cli, phpredis ?

Redis协议中的客户端是指与Redis服务器进行通信的软件实体或库。这些客户端可以使用Redis协议来发送命令请求并接收服务器的响应。

以下是一些常见的Redis客户端:

  1. redis-cli:redis-cli是Redis官方提供的命令行工具,用于与Redis服务器进行交互。它支持直接在终端中输入Redis命令并执行,并显示服务器的响应结果。

  2. phpredis:phpredis是Redis的官方PHP扩展,提供了一个PHP客户端库,用于在PHP应用程序中与Redis服务器进行通信。它使用Redis协议来发送命令请求和接收响应,并提供了方便的API来使用Redis的功能。

  3. Jedis:Jedis是一个Java语言的Redis客户端库,它实现了Redis协议,允许Java应用程序与Redis服务器进行通信。

  4. StackExchange.Redis:StackExchange.Redis是一个.NET平台的Redis客户端库,它提供了对Redis的访问功能,并使用Redis协议进行通信。

除了上述示例,还有许多其他语言和平台的Redis客户端库可供使用,如Python的redis-py、Node.js的ioredis等。这些客户端库实现了Redis协议,使得开发者可以方便地在各种应用程序中与Redis服务器进行交互和数据操作。

无论使用哪个客户端,它们都遵循Redis协议,通过发送命令请求和接收服务器响应来与Redis进行通信。

redis-cli在与redis-server进行交互时使用的是长连接而不是短连接。

当您使用redis-cli连接到redis-server后,它会建立一个TCP连接,并保持与服务器的持久连接。在这种情况下,您可以连续输入多个命令并进行交互,而不需要每次都重新建立连接。

因此,redis-cli实际上使用的是长连接,它在与redis-server之间保持连接状态,允许您在同一个连接上执行多个命令,而不是每次都建立一个新的连接。

这样的长连接机制使得在redis-cli中可以方便地进行交互式操作,连续执行多个命令,并在同一个会话中保持状态。

2.4 SSH协议

TBD

2.5 JDBC 协议

34 | 动手实现一个简单的RPC框架(四):服务端-极客时间

TBD

临时插入

调用 RpcAccessPoint.getNameService() 方法,获取注册中心实例时,传入的参数就是 JDBC 的 URL,比如:“jdbc:mysql://127.0.0.1/mydb”;

2.6 FTP协议

TBD

2.7 Memcache

TBD

2.8 File协议

本地文件传输协议。

File协议主要用于访问本地计算机中的文件,就如同在Windows资源管理器中打开文件一样。

应用:要使用File协议,基本的格式如下:file:///文件路径,比如要打开D盘images文件夹中的pic.gif文件,那么可以在资源管理器或IE地址栏中键入:file:///D:/images/pic.gif 然后回车。

*nix 下也是如此.

如下:「Mac」

file:///Users/huangbaoyin/Documents/Code/swoole/learning_of_swoole/2-%E5%BF%AB%E9%80%9F%E5%90%AF%E5%8A%A8/client/ws/ws-1.html

后续补充

...

3.问题/补充

1. 数据库主从读写分离「一定会涉及到主从复制,也伴随着主从同步的延迟问题,然后就引出了主从同步的数据一致性问题和取舍方案」

本节课,我带你了解了查询量增加时,我们如何通过主从分离和一主多从部署抵抗增加的数据库流量的,你除了掌握主从复制的技术之外,还需要了解主从分离会带来什么问题以及它们的解决办法。

这里我想让你明确的要点主要有:

1. 主从读写分离以及部署一主多从可以解决突发的数据库读流量,是一种数据库横向扩展的方法;

2. 读写分离后,主从的延迟是一个关键的监控指标,可能会造成写入数据之后立刻读的时候读取不到的情况;

3. 业界有很多的方案可以屏蔽主从分离之后数据库访问的细节,让开发人员像是访问单一数据库一样,包括有像 TDDL、Sharding-JDBC 这样的嵌入应用内部的方案,也有像 Mycat 这样的独立部署的代理方案。

其实,我们可以把主从复制引申为存储节点之间互相复制存储数据的技术,它可以实现数据的冗余,以达到备份和提升横向扩展能力的作用。

在使用主从复制这个技术点时,你一般会考虑两个问题:

1. 主从的一致性和写入性能的权衡,如果你要保证所有从节点都写入成功,那么写入性能一定会受影响;如果你只写入主节点就返回成功,那么从节点就有可能出现数据同步失败的情况,从而造成主从不一致,而在互联网的项目中,我们一般会优先考虑性能而不是数据的强一致性。

2. 主从的延迟问题,很多诡异的读取不到数据的问题都可能会和它有关,如果你遇到这类问题不妨先看看主从延迟的数据。

我们采用的很多组件都会使用到这个技术,比如,Redis 也是通过主从复制实现读写分离;Elasticsearch 中存储的索引分片也可以被复制到多个节点中;写入到 HDFS 中文件也会被复制到多个 DataNode 中。只是不同的组件对于复制的一致性、延迟要求不同,采用的方案也不同。但是这种设计的思想是通用的,是你需要了解的,这样你在学习其他存储组件的时候就能够触类旁通了。

一课一思

我们提到,存储节点间互相复制数据是一种常见的,提升系统可用性和性能的方式,那么你还了解哪些组件有使用这种方式呢?它们的复制方式又是如何的呢?欢迎在留言区与我分享你的经验。

2, redis传输协议与http传输协议有什么区别? 不都是基于ip/tcp协议吗

Redis传输协议和HTTP传输协议都是基于IP/TCP协议栈,但它们在通信方式和数据格式上有一些区别。

  1. 通信方式:

    • Redis:Redis使用简单的请求-响应模型。客户端发送请求给服务器,服务器响应并返回结果。在这个过程中,客户端和服务器保持持久连接(PERSISTENT CONNECTION)。
    • HTTP:HTTP使用请求-响应模型,类似于Redis。但是,默认情况下,HTTP是无状态的,每次请求都是独立的,不保持持久连接。基于HTTP/1.1的持久连接(keep-alive)可以通过在请求头中设置Connection: keep-alive来实现。
  2. 数据格式:

    • Redis:Redis使用自定义的二进制安全协议,被称为Redis协议或RESP(REdis Serialization Protocol)。该协议使用简单的文本格式,包括命令和参数之间的简单字符串表示。
    • HTTP:HTTP使用文本协议,具有明确定义的请求和响应格式。请求由请求行、请求头和请求体组成,响应由响应状态行、响应头和响应体组成。请求和响应中的头部和正文内容都使用文本格式。
  3. 功能和用途:

    • Redis:Redis是一种高性能的键值存储系统,支持多种数据类型和丰富的操作命令。它通常用于缓存、会话存储、消息队列等场景。
    • HTTP:HTTP是一种通用的应用层协议,用于在客户端和服务器之间传输超文本(HTML)、文件、API请求等。它是Web应用和服务之间的重要通信协议。

虽然Redis和HTTP都基于IP/TCP协议,但它们的通信方式、数据格式和用途有所不同。Redis专注于高性能的键值存储,而HTTP则是一种通用的应用层协议,用于传输超文本和实现各种Web功能。

实际上,Redis和HTTP都是应用层协议。

应用层协议是在网络通信中位于最高层的协议,用于定义不同应用程序之间的通信规则和数据交换格式。它们建立在传输层(如TCP)之上,使用传输层提供的可靠的数据传输服务。

Redis和HTTP都运行在应用层,而不是直接在IP/TCP协议上操作。它们定义了特定的通信规则和数据格式,以便客户端和服务器之间进行有效的交互。

总结:Redis和HTTP都是应用层协议,用于定义数据交换和通信规则,但在通信方式、数据格式和用途上有所不同。

4.参考

参见文档阅读列表

后续补充

...

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值