当前位置: 首页 > news >正文

义乌网站制作河北邯郸房价

义乌网站制作,河北邯郸房价,微商目前十大火爆产品,如何建立网站建设引言 PostgreSQL 使用基于消息的协议在前端#xff08;也可以称为客户端#xff09;和后端#xff08;也可以称为服务器#xff09;之间进行通信。该协议通过 TCP/IP 和 Unix 域套接字支持。 《深度解析 PostgreSQL Protocol v3.0》系列技术贴#xff0c;将带大家深度了… 引言 PostgreSQL 使用基于消息的协议在前端也可以称为客户端和后端也可以称为服务器之间进行通信。该协议通过 TCP/IP 和 Unix 域套接字支持。 《深度解析 PostgreSQL Protocol v3.0》系列技术贴将带大家深度了解 PostgreSQL Protocol 3.0 版本在 PostgreSQL 7.4 及更高版本中实现有关早期协议版本的描述请参考 PostgreSQL 文档的早期版本该系列文章不予赘述相关的消息传输格式和格式码、消息支持的数据类型、消息的格式、协议交互流程、错误消息和通知消息、支持的子协议等相关的代码解读基于 PostgreSQL 代码仓库的 REL_14_STABLE 分支。 PostgreSQL 单个服务器可以支持多个协议版本可以接收和处理多个不同版本协议的客户端的请求消息。初始启动请求消息告诉服务器、客户端尝试使用的协议版本 如果客户端请求的主要版本不受服务器支持则连接将被拒绝例如如果客户端请求协议版本 4.0而服务器端支持的协议版本不存在 4.0此时就会发生这种情况 如果服务器不支持客户端请求的次要版本例如客户端请求版本为 3.1但服务器仅支持 3.0不支持 3.1 版本此时就会发生这种情况则服务器可以拒绝连接或者可以使用包含其支持的最高次要协议版本的 NegotiateProtocolVersion 消息进行响应。 客户端可以选择使用服务器端指定的协议版本继续连接或中止连接。为了高效地为多个客户端提供服务服务器为每个客户端启动一个新的进程进行请求处理。在当前实现中在服务器检测到客户端的 Socket 连接后立即创建新的子进程进行后续的处理比如 SSL 通信加密协商、启动消息、身份认证等流程。 一、消息传输的格式 客户端和服务器所有的交互都是通过消息流进行的。每一条消息主要由三部分组成 消息类型 用于标记消息的类型是单个字符或者 1 位的数字。消息类型长度占用 1 个字节。 消息长度 消息中除了消息类型之外的字节长度。消息长度占用 4 个字节。消息长度的值包含了消息长度本身的 4 个字节长度。计算方法 1消息字节总长度减去 1 字节的消息类型的长度 2消息内容字节总长度加上消息长度本身占用的字节数 4。 消息体 消息的具体 payload 内容例如简单查询的 SQL 内容。 需要注意的是由于历史原因客户端发送的第一条消息启动消息没有消息类型的 1 个字节。服务器和客户端为了避免与消息流失去同步通常在尝试处理消息内容之前将整个消息读入缓冲区使用字节计数。 如果在处理消息内容时检测到错误就可以轻松恢复。在极端情况下例如没有足够的内存来缓冲消息接收器可以使用字节计数来确定在恢复读取消息之前要跳过多少输入字节长度。服务器和客户端都必须注意不要发送不完整的消息。这通常是通过在开始发送之前在缓冲区中编码整个消息来完成的。 如果在发送或接收消息的过程中发生通信故障那么唯一明智的做法是断开连接因为恢复消息边界同步的希望很小。 二、消息支持的数据类型 PostgreSQL Protocol v3.0 的消息中支持的数据类型只有以下 4 种 Intn(i) n 位二进制表示的整数为网络字节顺序最高有效字节优先MSBn 表示该值占用的位数。 如果指定了 i则 i 是将出现的确切值如果未指定 i 值该值是可变的。例如Int16 表示一个值未指定的占用 16 位二进制位的整数占用长度为 2 个字节占用 16 位二进制Int32(42)表示一个值为 42 的占用 32 位二进制位的整数占用长度为 4 个字节占用 32 位二进制。 Intn[k] 由 k 个 n 位二进制表示的整数组成的数组。数组长度 k 始终由消息中较早的字段确定。 String(s) 以空结尾的字符串C-style 字符串。字符串没有特定的长度限制。 如果指定了 s则 s 是将出现的确切值如果未指定 s 值该值是可变的。例如String 表示一个值未指定的字符串String(user)表示值为 user 的字符串。 需要注意的是服务器可以返回的字符串长度没有预定义长度的限制因此客户端比较好的编码策略是使用可扩展缓冲区以便可以接收适合内存大小的内容。如果这不可行请读取整个字符串并丢弃不适合固定大小缓冲区的尾随字符。 Byten(c) n 个字节。如果字段宽度 n 不是常数则它总是可以从消息中较早的字段确定。如果指定了 c则 c 为该字段的精确值。例如Byte2 表示值未指定的 2 个字节Byte1(\n)表示值为\n的 1 个字节。 除了以上四种数据类型其他数据类型在 PostgreSQL Protocol v3.0 的消息中均不支持。 三、消息传输的格式和格式码 在 Postgresql Protocole 中特定数据类型的数据可以用几种不同格式中的任何一种传输。 从 PostgreSQL 7.4PostgreSQL Protocol v3.0开始协议支持的数据传输支持的格式是 text文本和 binary二进制该协议为将来的扩展做好了准备。任何值传输的格式由格式代码指定。 客户端可以为每个传输的参数值和查询结果的每一列指定格式代码。text 的格式代码为 0binary 的格式代码是 1所有其他格式代码都保留以供将来定义。 值的 text 表示是输入/输出转换函数为特定数据类型生成/接受的字符串。在传输 text 的表示中没有结尾空字符如果客户端想要将接收到的值作为 C 风格字符串处理则客户端必须自行将其加 1 个空字符。需要注意的是text 传输格式的值不允许内嵌空字符。 整数的 binary 表示使用网络字节顺序最高有效字节优先MSB。 值得特别注意的是复杂数据类型的 binary 表示可能会在服务器版本之间发生变化因此 text 格式通常是更便携更通用的选择。 四、消息的交互流程 PostgreSQL Protocol v3.0 的交互流程主要包括以下几种流程 1. 启动流程 要开始会话客户端将打开与服务器的连接并发送启动消息 StartupMessage。启动消息包括用户的名称、用户想要连接到的数据库的名称和要使用的特定协议版本启动消息可以包括运行时参数的其他设置但是这些参数都是可选的。 接着服务器使用这些信息及其配置文件如 pg_hba.conf的内容来确定连接是否暂时可接受以及需要什么附加身份验证如果有的话。 然后服务器发送适当的身份验证请求消息客户端必须用适当的身份认证响应消息如密码回复该消息。 对于除 GSSAPI、SSPI 和 SASL 之外的所有身份验证方法最多只有一个请求和一个响应。在某些方法中客户端不需要响应因此不会发生身份验证请求。对于 GSSAPI、SSPI 和 SASL可能需要多次交换数据包才能完成身份验证。 2. 简单查询流程 一个简单查询的周期由客户端端向服务器端发送查询消息来启动。该消息包括一个以文本字符串表示的 SQL 命令。然后服务器根据查询命令字符串的内容进行执行执行完成发送一条或多条响应消息最后发送 ReadyForQuery 响应消息。 ReadyForQuery 通知客户端可以安全地发送新命令。客户端实际上不需要在发出另一个命令之前等待 ReadyForQuery但客户端必须负责弄清楚如果前一个命令失败而已经发出的后一个命令成功会发生什么情况。因此建议的做法是客户端接收到 ReadyForQuery 消息之后再发送新命令。 简单查询的交互流程中也会出现一些异常情况会得到异常的响应。例如查询 SQL 为空字符串则响应为 EmptyQueryResponse后跟 ReadyForQuery。发生错误时发出 ErrorResponse然后发出 ReadyForQuery。ErrorResponse 会中止对查询字符串的所有进一步处理。 3. 扩展查询 扩展查询协议将上述简单查询协议分解为多个步骤。为了提高效率可以多次重复使用 Prepare 步骤的结果。 此外还提供了其他功能例如可以将数据值作为单独的参数提供而不必将它们直接插入到查询字符串中。扩展查询一般需要经过 Parse, Bind 和 Execute 步骤中间有一些可选步骤如 DescribeClose 和 Flush。 4. Pipelining 扩展查询协议的使用允许流水线这意味着发送一系列查询而无需等待较早的查询完成。流水线减少了完成给定系列操作所需的网络往返次数。 但是如果其中一个步骤失败用户必须仔细考虑所需的处理因为稍后的查询已经在发送到服务器。 5. 函数调用Function Call流程 函数调用(Function Call)子协议允许客户端请求直接调用数据库的 pg_proc 系统目录中存在的任何函数。客户端必须具有函数的执行权限。 函数调用子协议是一个较早版本的遗留功能在新代码/新版本中最好避免使用。类似的结果可以通过设置执行 SELECT function($1, …)的准备语句的值来实现。然后可以用 Bind/Execute 代替函数调用周期。 函数调用周期由客户端向端发送 FunctionCall 消息来启动。服务端根据函数调用的结果发送一条或多条响应消息最后发送 ReadyForQuery 响应消息。ReadyForQuery 通知客户端它可以安全地发送新的查询或函数调用。 6. 取消执行中的请求流程 在处理查询期间客户端可能会请求取消查询。出于实现效率的原因取消请求不会直接通过正在执行查询的连接发送到服务端不希望服务端在查询处理过程中不断检查来自客户端的新输入。取消请求应该是相对较少的所以我们让取消流程稍微麻烦一些以避免在正常情况下发生错误。 要发出取消请求客户端应该打开到服务器的新连接并发送一条 CancelRequest 消息而不是通常通过新连接发送的 StartupMessage 消息。服务器将处理此请求然后关闭连接。出于安全原因不直接回复取消请求消息。 7. 结束流程 正常、友好的终止过程是客户端发送 Terminate 终止消息并立即关闭连接。服务端收到此 Terminate 消息后关闭连接并终止。 在极少数情况下如管理员通过命令关闭数据库服务器端可能会在没有任何客户端请求的情况下断开连接。在这种情况下服务器端将尝试在关闭连接之前发送错误或通知消息给出断开连接的原因。 8. COPY 操作 COPY 命令允许客户端与服务器之间进行高速批量数据传输。COPY IN 和 COPY OUT 操作都会将连接切换到不同的子协议中该子协议将持续到操作完成。 COPY IN 是将数据从客户端传输到服务器端COPY OUT 是将数据从服务器端传输到客户端。还有另一种与 COPY 相关的模式称为“双向复制”它允许客户端与服务器之间的双向高速批量数据传输。 9. 异步操作 有几种情况下服务器端将向客户端发送客户端命令没有特别请求的消息。客户端必须随时准备好处理这些消息即使这些消息不是为了响应查询请求。 因此客户端在开始读取查询响应之前至少应该检查这些情况。服务端异步发送给客户端的消息主要有两种类型NoticeResponse 消息和 ParameterStatus 消息。 五、错误消息和通知消息 错误消息 ErrorResponse 和通知消息 NoticeResponse通常是在服务器端处理失败或者发生异常场景时通知客户端执行失败或者服务器端异常原因的消息。 错误消息和通知消息中可能出现的每个字段类型都有一个单字节标识并且任何给定的字段类型在每条消息中最多出现一次。错误消息和通知消息中可能出现的字段及其含义如下表所示。 客户端负责格式化显示错误消息和通知消息的信息以满足其需要。客户端应该根据需要进行换行等错误消息字段中出现的换行符应视为段落分隔符而不是换行符。 六、其他子协议简介 1. 流复制协议Streaming Replication Protocol和逻辑流复制协议Logical Streaming Replication Protocol 要启动流复制客户端在启动消息中发送 replication 参数。replication 参数为布尔值值为 true或 onyes1告诉服务器端进入物理复制 walsender 模式其中可以发出一组复制命令而不是 SQL 语句。 将 database 作为 replication 参数的值传递指示服务器端进入逻辑复制 walsender 模式连接到 dbname 参数中指定的数据库。在逻辑复制 walsender 模式下可以发出复制命令以及正常的 SQL 命令。在物理复制或逻辑复制 walsender 模式中只能使用简单的查询协议。 这两种协议主要应用于主备服务器数据同步的场景。流复制也叫物理复制是基于对文件块的流复制逻辑复制是基于对数据元组按照一定格式进行复制。 2. 加密协议 1SSL 会话加密 如果 PostgreSQL 的构建选项使用了 SSL那么客户端和服务器端通信可以使用 SSL 加密。SSL 会话加密在攻击者可能能够捕获会话流量的环境中提供了通信安全性。 2GSSAPI 会话加密 如果 PostgreSQL 的构建选项是使用了 GSSAPI则可以使用 GSSAPI 加密客户端和服务器端的通信流量。这在攻击者可能能够捕获会话流量的环境中提供了通信安全性。 本篇技术贴中第四、五、六章节的相应内容会在后续推出的《深度解析 PostgreSQL Protocol v3.0》系列文章中为大家进行详细展开对本系列感兴趣的小伙伴欢迎关注我们第一时间获取更新内容噢。
文章转载自:
http://www.morning.skwwj.cn.gov.cn.skwwj.cn
http://www.morning.jwmws.cn.gov.cn.jwmws.cn
http://www.morning.qbjrl.cn.gov.cn.qbjrl.cn
http://www.morning.gl-group.cn.gov.cn.gl-group.cn
http://www.morning.kqylg.cn.gov.cn.kqylg.cn
http://www.morning.ssjee.cn.gov.cn.ssjee.cn
http://www.morning.qddtd.cn.gov.cn.qddtd.cn
http://www.morning.dlrsjc.com.gov.cn.dlrsjc.com
http://www.morning.pffqh.cn.gov.cn.pffqh.cn
http://www.morning.yrdkl.cn.gov.cn.yrdkl.cn
http://www.morning.plfrk.cn.gov.cn.plfrk.cn
http://www.morning.jggr.cn.gov.cn.jggr.cn
http://www.morning.rscrj.cn.gov.cn.rscrj.cn
http://www.morning.mxlwl.cn.gov.cn.mxlwl.cn
http://www.morning.bpp999.com.gov.cn.bpp999.com
http://www.morning.pszw.cn.gov.cn.pszw.cn
http://www.morning.zmyhn.cn.gov.cn.zmyhn.cn
http://www.morning.rcjwl.cn.gov.cn.rcjwl.cn
http://www.morning.ttrdr.cn.gov.cn.ttrdr.cn
http://www.morning.hytqt.cn.gov.cn.hytqt.cn
http://www.morning.mtsck.cn.gov.cn.mtsck.cn
http://www.morning.aswev.com.gov.cn.aswev.com
http://www.morning.rahllp.com.gov.cn.rahllp.com
http://www.morning.rfljb.cn.gov.cn.rfljb.cn
http://www.morning.qmxsx.cn.gov.cn.qmxsx.cn
http://www.morning.nqwkn.cn.gov.cn.nqwkn.cn
http://www.morning.kzcfr.cn.gov.cn.kzcfr.cn
http://www.morning.lhrxq.cn.gov.cn.lhrxq.cn
http://www.morning.wdpt.cn.gov.cn.wdpt.cn
http://www.morning.qxycf.cn.gov.cn.qxycf.cn
http://www.morning.tgpgx.cn.gov.cn.tgpgx.cn
http://www.morning.blxor.com.gov.cn.blxor.com
http://www.morning.tqygx.cn.gov.cn.tqygx.cn
http://www.morning.mjdbd.cn.gov.cn.mjdbd.cn
http://www.morning.sfgzx.cn.gov.cn.sfgzx.cn
http://www.morning.fpqq.cn.gov.cn.fpqq.cn
http://www.morning.mdfxn.cn.gov.cn.mdfxn.cn
http://www.morning.wzknt.cn.gov.cn.wzknt.cn
http://www.morning.jqrp.cn.gov.cn.jqrp.cn
http://www.morning.mtxrq.cn.gov.cn.mtxrq.cn
http://www.morning.dnmzl.cn.gov.cn.dnmzl.cn
http://www.morning.lcjw.cn.gov.cn.lcjw.cn
http://www.morning.dzfwb.cn.gov.cn.dzfwb.cn
http://www.morning.fbxdp.cn.gov.cn.fbxdp.cn
http://www.morning.pymff.cn.gov.cn.pymff.cn
http://www.morning.crfyr.cn.gov.cn.crfyr.cn
http://www.morning.fhjnh.cn.gov.cn.fhjnh.cn
http://www.morning.bryyb.cn.gov.cn.bryyb.cn
http://www.morning.trjp.cn.gov.cn.trjp.cn
http://www.morning.dhnqt.cn.gov.cn.dhnqt.cn
http://www.morning.bpmtx.cn.gov.cn.bpmtx.cn
http://www.morning.xpzgg.cn.gov.cn.xpzgg.cn
http://www.morning.bmnm.cn.gov.cn.bmnm.cn
http://www.morning.qsxxl.cn.gov.cn.qsxxl.cn
http://www.morning.ghfrb.cn.gov.cn.ghfrb.cn
http://www.morning.fpxms.cn.gov.cn.fpxms.cn
http://www.morning.wnpps.cn.gov.cn.wnpps.cn
http://www.morning.mkyny.cn.gov.cn.mkyny.cn
http://www.morning.dnmwl.cn.gov.cn.dnmwl.cn
http://www.morning.xqwq.cn.gov.cn.xqwq.cn
http://www.morning.zcyxq.cn.gov.cn.zcyxq.cn
http://www.morning.jglqn.cn.gov.cn.jglqn.cn
http://www.morning.rtqyy.cn.gov.cn.rtqyy.cn
http://www.morning.qhjkz.cn.gov.cn.qhjkz.cn
http://www.morning.jbblf.cn.gov.cn.jbblf.cn
http://www.morning.llcgz.cn.gov.cn.llcgz.cn
http://www.morning.dygqq.cn.gov.cn.dygqq.cn
http://www.morning.djxnn.cn.gov.cn.djxnn.cn
http://www.morning.hrpjx.cn.gov.cn.hrpjx.cn
http://www.morning.hmtft.cn.gov.cn.hmtft.cn
http://www.morning.qhydkj.com.gov.cn.qhydkj.com
http://www.morning.brps.cn.gov.cn.brps.cn
http://www.morning.xnqwk.cn.gov.cn.xnqwk.cn
http://www.morning.gsjfn.cn.gov.cn.gsjfn.cn
http://www.morning.snxbf.cn.gov.cn.snxbf.cn
http://www.morning.ggxbyhk.cn.gov.cn.ggxbyhk.cn
http://www.morning.ylzdx.cn.gov.cn.ylzdx.cn
http://www.morning.jbtlf.cn.gov.cn.jbtlf.cn
http://www.morning.zkqwk.cn.gov.cn.zkqwk.cn
http://www.morning.fkmyq.cn.gov.cn.fkmyq.cn
http://www.tj-hxxt.cn/news/254688.html

相关文章:

  • 网站后台数据库设计上海何鹏seo
  • 奉化市建设局网站免费wordpress中文博客主题
  • 国家企业信用信息公示系统官网站自己建个网站要多少钱
  • 长安网站制作公司拓客软件排行榜
  • 苏州建设银行官方网站重庆竣工验收备案网上查询
  • 淘客联盟做任务网站高端购物网站
  • 网站开发与服务合同张家界旅游网站建设
  • 做网站需要看那几点wordpress英文主题变中文版
  • 网站开发后台前端数据库建筑人力网
  • 网站数据库是谁提供网页设计3个页面
  • 网站内容优化怎么去优化呢石家庄网页设计培训班
  • 电商网站建设去迅法网郑州网络营销公司
  • 监控性能网站模板河南中恒诚信建设有限公司网站
  • 网站开发竞争性谈判室内设计方案ppt作业
  • wordpress主题的网站WordPress评级主题
  • 营销型网站建设的资讯廊坊市做网站的公司有哪些
  • 网站推广渠道怎么做开发app需要的技术
  • 临西网站建设费用网站建设费属于哪个税种
  • 2狠狠做网站六安城市网招聘
  • w微信网站开发亚洲杯篮球直播在什么网站
  • 网站治做啊app免费com域名注册永久
  • wex5 后端实现全网站开发深圳域名注册公司
  • 商城微网站如何做网络运营商包括哪些
  • wordpress公司网站wordpress 登录跳转
  • 做网站需要提交最好的网站模板
  • 有什么网站可以接单做兼职的企业做网站推广产品需要多少钱
  • 自己怎么建购物网站优化一个网站
  • 个人网站必须备案如何提升网站打开速度
  • 网站推广公司兴田德润在哪儿网站查询服务器
  • 建设工程质量协会网站网站建设运营