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

网站备案转入网页设计视频循环播放代码

网站备案转入,网页设计视频循环播放代码,做网站语言排名2018,淘宝电脑版官网首页登录入口gRPC 的原理 什么是gRPC gRPC的官方介绍是#xff1a;gRPC是一个现代的、高性能、开源的和语言无关的通用 RPC 框架#xff0c;基于 HTTP2 协议设计#xff0c;序列化使用PB(Protocol Buffer)#xff0c;PB 是一种语言无关的高性能序列化框架#xff0c;基于 HTTP2PB 保…gRPC 的原理 什么是gRPC gRPC的官方介绍是gRPC是一个现代的、高性能、开源的和语言无关的通用 RPC 框架基于 HTTP2 协议设计序列化使用PB(Protocol Buffer)PB 是一种语言无关的高性能序列化框架基于 HTTP2PB 保证了的高性能。 好吧我知道对于一个初学者来说这并没有意义首先我们需要提炼关键来回答以下几个问题从而真正明白gRPC到底是什么 gRPC 和 RPC 的区别HTTP2 协议是什么基于他的设计是什么意思序列化PB(Protocol Buffer) 是什么 gRPC 和RPC 的区别 RPCRemote Procedure Call是一种通过网络从远程计算机程序上请求服务而不需要了解底层网络技术的协议。 gRPC是Google开发的一个RPC系统它使用HTTP/2协议进行通信并使用Protocol Buffers作为接口描述语言。 这使得gRPC比传统的RPC更加强大可以支持流式请求和响应以及其他复杂的交互模式。 总结RPC 是一个框架已经写好一些功能但是并不适合谷歌的应用场景在这个基础上 谷歌 对RPC 框架进行了迭代开发形成了gRPC。 HTTP2 协议是什么基于他的设计是什么意思 HTTP/2是HTTP协议的第二个主要版本它在性能优化、服务器推送、头信息压缩、协议复用等方面都有显著的改进。 基于HTTP/2的设计意味着gRPC在设计时充分利用了HTTP/2的这些特性 例如它可以在一个TCP连接上并行发送多个请求和响应减少了网络延迟。 总结http2 是一个通讯规定基于http2 的协议设计是指在使用这个通讯规定上进行的程序软件设计。 gRPC 即是基于RPC协议又基于HTTP2协议这两种协议怎么融合的 在明确上述两种协议的具体内容之后我们就可以回答这个问题了。在gRPC中RPC是它的业务逻辑基本框架HTTP2 是它的通讯逻辑基本原理。 从而我们可以理解这张图 ![[Pasted image 20231114145840.png]] 二进制序列化PB(Protocol Buffer) 是什么 Protocol Buffers简称PB是Google开发的一种数据序列化协议类似于XML、JSON、hessian。 它能够将数据结构以高效和可扩展的格式进行序列化可以用于网络通信和数据存储等场景。 上面的解释很绕让我们先明确什么是序列化简单点说就是把信息按照固定格式组织起来为的是解决不同系统、不同编程语言、不同平台之间的传输存储问题。 序列化是指将对象转换为可以在网络传输或存储中使用的格式以便在需要时可以重新构造出原始对象。在序列化过程中对象的状态被转换为字节流或其他可传输的形式以便可以在不同的系统、编程语言或平台之间进行传输或存储。 序列化的主要目的是实现对象的持久化、跨网络传输和跨平台通信。通过序列化可以将对象转换为字节流然后可以将字节流保存到文件中、通过网络发送给其他系统或者在不同的程序之间进行交互。在接收方可以通过反序列化将字节流转换回原始对象以便进行进一步的处理或使用。 常见的序列化格式包括JSON、XML和Protocol BuffersProtobuf等。不同的序列化格式具有不同的特点和适用场景选择合适的序列化格式取决于具体的需求和使用环境。 怎么用呢这里我们以PB为例 Protocol Buffers简称Protobuf使用特定的语法和编译器来定义消息的结构和字段然后通过编译器生成相应的代码用于序列化和反序列化对象。 下面是使用C代码的示例展示了如何使用Protobuf进行对象的序列化和反序列化 定义消息结构 首先需要使用Protobuf的语法定义消息的结构和字段。例如创建一个名为Person的消息类型包含name和age字段 syntax proto3;message Person {string name 1;int32 age 2; }生成代码 使用Protobuf的编译器将上述定义的消息结构编译为相应的代码。在C中可以使用protoc命令行工具进行编译 protoc --cpp_out. person.proto这将生成person.pb.h和person.pb.cc两个文件包含了用于序列化和反序列化Person消息的代码。 序列化对象 在C代码中可以使用生成的代码来创建Person对象并将其序列化为字节流 #include person.pb.h// 创建Person对象 Person person; person.set_name(John); person.set_age(25);// 序列化为字节流 std::string serialized_data; person.SerializeToString(serialized_data);SerializeToString方法将Person对象序列化为一个字符串。 反序列化对象 反之可以将序列化的字节流反序列化为原始的Person对象 // 反序列化为Person对象 Person deserialized_person; deserialized_person.ParseFromString(serialized_data);// 访问反序列化后的字段 std::string name deserialized_person.name(); int age deserialized_person.age();ParseFromString方法将字节流解析为Person对象并可以通过访问相应的字段获取数据。 需要注意的是上述示例中的代码是使用C语言进行的如果使用其他编程语言操作步骤会有所不同但基本原理是相似的。 gRPC的工作方式 在通过上述 的详细介绍之后我们就可以介绍gRPC 的工作方式来说明什么是gRPC 了。 ![[Pasted image 20231114151128.png]] 上图中使用的是c和红宝石以及安卓开发三种语言、平台、系统都不同的实例间通讯展示的是gRPC 的 通用性 ![[Pasted image 20231114151324.png]] 上图是解释了信息在gRPC 中是怎样流转的。展示的是gRPC 的 序列化 为什么使用gRPC gRPC 的原理 自由开放让所有人所有平台都能使用其实就是开源跨平台跨语言协议可插拔不同的服务可能需要使用不同的消息通信类型和编码机制例如JSON、XML和Thirft,所以协议应允许可插拔机制还有负载均衡服务发现日志监控等都支持可插拔机制阻塞和非阻塞支持客户端和服务器交换的消息序列的异步和同步处理。这对于在某些平台上扩展和处理至关重要取消和超时一次RPC操作可能是持久并且昂贵的应该允许客户端设置取消RPC通信和对这次通信加上一个超时时间拒绝必须允许服务器通过在继续处理请求的同时拒绝新请求的到来并优雅地关闭。流处理存储系统依靠流和流控制来表达大型数据集其他服务如语音到文本或股票行情依赖于流来表示与时间相关的消息序列流控制计算能力和网络容量在客户端和服务器之间通常是不平衡的。流控制允许更好的缓冲区管理以及过度活跃的对等体提供对DOS的保护。元数据交换认证或跟踪等常见的跨领域问题依赖于不属于服务声明接口的数据交换。依赖于他们将这些特性演进到服务暴露API来提供能力。标准化状态码客户端通常以有限的方式响应API调用返回的错误。应约束状态码名称空间以使这些错误处理决策更加清晰。如果需要更丰富的特定领域的状态则可以使用元数据交换机制来提供该状态。互通性报文协议(Wire Protocol)必须遵循普通互联网基础框架 gRPC 的一些特性 gRPC基于服务的思想定义一个服务描述这个服务的方法以及入参出参服务器端有这个服务的具体实现客户端保有一个存根提供与服务端相同的服务。 gRPC默认采用protocol buffer作为IDL(Interface Description Lanage)接口描述语言,服务之间通信的数据序列化和反序列化也是基于protocol buffer的因为protocol buffer的特殊性所以gRPC框架是跨语言的通信框架(与编程语言无关性)也就是说用Java开发的基于gRPC的服务可以用GoLang编程语言调用 gRPC同时支持同步调用和异步调用同步RPC调用时会一直阻塞直到服务端处理完成返回结果异步RPC是客户端调用服务端时不等待服务段处理完成返回而是服务端处理完成后主动回调客户端告诉客户端处理完成 gRPC是基于http2协议实现的http2协议提供了很多新的特性并且在性能上也比http1提搞了许多所以gRPC的性能是非常好的 gRPC并没有直接实现负载均衡和服务发现的功能但是已经提供了自己的设计思路。已经为命名解析和负载均衡提供了接口 基于http2协议的特性gRPC允许定义如下四类服务方法 一元RPC客户端发送一次请求等待服务端响应结构会话结束就像一次普通的函数调用这样简单服务端流式RPC客户端发起一起请求服务端会返回一个流客户端会从流中读取一系列消息直到没有结果为止客户端流式RPC客户端提供一个数据流并写入消息发给服务端一旦客户端发送完毕就等待服务器读取这些消息并返回应答双向流式RPC客户端和服务端都一个数据流都可以通过各自的流进行读写数据这两个流是相互独立的客户端和服务端都可以按其希望的任意顺序独写 gRPC的使用场景 低延迟高度可扩展的分布式系统 开发与云服务器通信的客户端 设计一个准确高效且与语言无关的新协议时 分层设计以实现扩展例如。身份验证负载平衡日志记录和监控等 谷歌长期以来一直在gRPC中使用很多基础技术和概念。目前正在谷歌的几个云产品和谷歌面向外部的API中使用。SquareNetflixCoreOSDockerCockroachDBCiscoJuniper Networks以及许多其他组织和个人也在使用它。 gRPC的数据封装和数据传输问题 这里我们主要介绍pb的工作方式即怎样封装数据 数据封装 gRPC 使用的是自己的封装方式 Protocol Buffer简称ProtoBuf是Google开发的一种跨语言、跨平台、可扩展的用于序列化数据协议。 下面是一个protoBuf 的样例 // XXXX.proto // rpc服务的类 service关键字 Test服务类名 service Test { // rpc 关键字rpc的接口 rpc HowRpcDefine (Request) returns (Response) ; // 定义一个RPC方法 } // message 类c class message Request { //类型 | 字段名字| 标号 int64 user_id 1; string name 2; } message Response { repeated int64 ids 1; // repeated 表示数组 Value info 2; // 可嵌套对象 mapint, Value values 3; // 可输出map映射 } message Value { bool is_man 1; int age 2; }以上是一个使用样例包含方法定义、入参、出参。可以看出有几个明确的特点 有明确的类型支持的类型有多种每个field会有名字每个field有一个数字标号一般按顺序排列(下文编解码会用到这个点)能表达数组、map映射等类型通过嵌套message可以表达复杂的对象方法、参数的定义落到一个.proto 文件中依赖双方需要同时持有这个文件并依此进行编解码 protobuf作为一个以跨语言为目标的序列化方案protobuf能做到多种语言以同一份proto文件作为约定不用A语言写一份B语言写一份各个依赖的服务将proto文件原样拷贝一份即可。 但.proto文件并不是代码不能执行要想直接跨语言是不行的必须得有对应语言的中间代码才行中间代码要有以下能力 将message转成对象例如C里是classgolang里是struct需要各自表达后才能被理解需要有进行编解码的代码能解码内容为自己语言的对象、能将对象编码为对应的数据 在完成数据封装之后我们就准备好了将它传输出去接下来就是数据传输了。 数据传输 grpc采用HTTP2.0相对于HTTP1.0 在 更快的传输 和 更低的成本 两个目标上做了改进。有以下几个基本点 HTTP2 未改变HTTP的语义(如GET/POST等)只是在传输上做了优化引入帧、流的概念在TCP连接中可以区分出多个request/response一个域名只会有一个TCP连接借助帧、流可以实现多路复用降低资源消耗引入二进制编码降低header带来的空间占用 HTTP1.1核心问题在于在同一个TCP连接中没办法区分response是属于哪个请求一旦多个请求返回的文本内容混在一起则没法区分数据归属于哪个请求所以请求只能一个个串行排队发送。这直接 导致了TCP资源的闲置。 HTTP2为了解决这个问题提出了 流 的概念每一次请求对应一个流有一个唯一ID用来区分不同的请求。基于流的概念进一步提出了 帧 一个请求的数据会被分成多个帧方便进行数据分割传输每个帧都唯一属于某一个流ID将帧按照流ID进行分组即可分离出不同的请求。这样同一个TCP连接中就可以同时并发多个请求不同请求的帧数据可穿插在一起根据流ID分组即可。HTTP2.0基于这种二进制协议的乱序模式 (Duplexing)直接解决了HTTP1.1的核心痛点通过这种复用TCP连接的方式不用再同时建多个连接提升了TCP的利用效率。 总结 传输使用 http2 协议是在tcp链接完成之后再在应用层发送时的一个协议通过流 ID 和 帧报文的两个概念 解决了传输拥塞的问题。我们将这种方式称之为 tcp链接复用。 gRPC 的原理 什么是gRPC gRPC的官方介绍是gRPC是一个现代的、高性能、开源的和语言无关的通用 RPC 框架基于 HTTP2 协议设计序列化使用PB(Protocol Buffer)PB 是一种语言无关的高性能序列化框架基于 HTTP2PB 保证了的高性能。 好吧我知道对于一个初学者来说这并没有意义首先我们需要提炼关键来回答以下几个问题从而真正明白gRPC到底是什么 gRPC 和 RPC 的区别HTTP2 协议是什么基于他的设计是什么意思序列化PB(Protocol Buffer) 是什么 gRPC 和RPC 的区别 RPCRemote Procedure Call是一种通过网络从远程计算机程序上请求服务而不需要了解底层网络技术的协议。 gRPC是Google开发的一个RPC系统它使用HTTP/2协议进行通信并使用Protocol Buffers作为接口描述语言。 这使得gRPC比传统的RPC更加强大可以支持流式请求和响应以及其他复杂的交互模式。 总结RPC 是一个框架已经写好一些功能但是并不适合谷歌的应用场景在这个基础上 谷歌 对RPC 框架进行了迭代开发形成了gRPC。 HTTP2 协议是什么基于他的设计是什么意思 HTTP/2是HTTP协议的第二个主要版本它在性能优化、服务器推送、头信息压缩、协议复用等方面都有显著的改进。 基于HTTP/2的设计意味着gRPC在设计时充分利用了HTTP/2的这些特性 例如它可以在一个TCP连接上并行发送多个请求和响应减少了网络延迟。 总结http2 是一个通讯规定基于http2 的协议设计是指在使用这个通讯规定上进行的程序软件设计。 gRPC 即是基于RPC协议又基于HTTP2协议这两种协议怎么融合的 在明确上述两种协议的具体内容之后我们就可以回答这个问题了。在gRPC中RPC是它的业务逻辑基本框架HTTP2 是它的通讯逻辑基本原理。 从而我们可以理解这张图 ![[Pasted image 20231114145840.png]] 二进制序列化PB(Protocol Buffer) 是什么 Protocol Buffers简称PB是Google开发的一种数据序列化协议类似于XML、JSON、hessian。 它能够将数据结构以高效和可扩展的格式进行序列化可以用于网络通信和数据存储等场景。 上面的解释很绕让我们先明确什么是序列化简单点说就是把信息按照固定格式组织起来为的是解决不同系统、不同编程语言、不同平台之间的传输存储问题。 序列化是指将对象转换为可以在网络传输或存储中使用的格式以便在需要时可以重新构造出原始对象。在序列化过程中对象的状态被转换为字节流或其他可传输的形式以便可以在不同的系统、编程语言或平台之间进行传输或存储。 序列化的主要目的是实现对象的持久化、跨网络传输和跨平台通信。通过序列化可以将对象转换为字节流然后可以将字节流保存到文件中、通过网络发送给其他系统或者在不同的程序之间进行交互。在接收方可以通过反序列化将字节流转换回原始对象以便进行进一步的处理或使用。 常见的序列化格式包括JSON、XML和Protocol BuffersProtobuf等。不同的序列化格式具有不同的特点和适用场景选择合适的序列化格式取决于具体的需求和使用环境。 怎么用呢这里我们以PB为例 Protocol Buffers简称Protobuf使用特定的语法和编译器来定义消息的结构和字段然后通过编译器生成相应的代码用于序列化和反序列化对象。 下面是使用C代码的示例展示了如何使用Protobuf进行对象的序列化和反序列化 定义消息结构 首先需要使用Protobuf的语法定义消息的结构和字段。例如创建一个名为Person的消息类型包含name和age字段 syntax proto3;message Person {string name 1;int32 age 2; }生成代码 使用Protobuf的编译器将上述定义的消息结构编译为相应的代码。在C中可以使用protoc命令行工具进行编译 protoc --cpp_out. person.proto这将生成person.pb.h和person.pb.cc两个文件包含了用于序列化和反序列化Person消息的代码。 序列化对象 在C代码中可以使用生成的代码来创建Person对象并将其序列化为字节流 #include person.pb.h// 创建Person对象 Person person; person.set_name(John); person.set_age(25);// 序列化为字节流 std::string serialized_data; person.SerializeToString(serialized_data);SerializeToString方法将Person对象序列化为一个字符串。 反序列化对象 反之可以将序列化的字节流反序列化为原始的Person对象 // 反序列化为Person对象 Person deserialized_person; deserialized_person.ParseFromString(serialized_data);// 访问反序列化后的字段 std::string name deserialized_person.name(); int age deserialized_person.age();ParseFromString方法将字节流解析为Person对象并可以通过访问相应的字段获取数据。 需要注意的是上述示例中的代码是使用C语言进行的如果使用其他编程语言操作步骤会有所不同但基本原理是相似的。 gRPC的工作方式 在通过上述 的详细介绍之后我们就可以介绍gRPC 的工作方式来说明什么是gRPC 了。 ) 包浆老图 上图中使用的是c和红宝石以及安卓开发三种语言、平台、系统都不同的实例间通讯展示的是gRPC 的 通用性 上图是解释了信息在gRPC 中是怎样流转的。展示的是gRPC 的 序列化 为什么使用gRPC gRPC 的原理 自由开放让所有人所有平台都能使用其实就是开源跨平台跨语言协议可插拔不同的服务可能需要使用不同的消息通信类型和编码机制例如JSON、XML和Thirft,所以协议应允许可插拔机制还有负载均衡服务发现日志监控等都支持可插拔机制阻塞和非阻塞支持客户端和服务器交换的消息序列的异步和同步处理。这对于在某些平台上扩展和处理至关重要取消和超时一次RPC操作可能是持久并且昂贵的应该允许客户端设置取消RPC通信和对这次通信加上一个超时时间拒绝必须允许服务器通过在继续处理请求的同时拒绝新请求的到来并优雅地关闭。流处理存储系统依靠流和流控制来表达大型数据集其他服务如语音到文本或股票行情依赖于流来表示与时间相关的消息序列流控制计算能力和网络容量在客户端和服务器之间通常是不平衡的。流控制允许更好的缓冲区管理以及过度活跃的对等体提供对DOS的保护。元数据交换认证或跟踪等常见的跨领域问题依赖于不属于服务声明接口的数据交换。依赖于他们将这些特性演进到服务暴露API来提供能力。标准化状态码客户端通常以有限的方式响应API调用返回的错误。应约束状态码名称空间以使这些错误处理决策更加清晰。如果需要更丰富的特定领域的状态则可以使用元数据交换机制来提供该状态。互通性报文协议(Wire Protocol)必须遵循普通互联网基础框架 gRPC 的一些特性 gRPC基于服务的思想定义一个服务描述这个服务的方法以及入参出参服务器端有这个服务的具体实现客户端保有一个存根提供与服务端相同的服务。 gRPC默认采用protocol buffer作为IDL(Interface Description Lanage)接口描述语言,服务之间通信的数据序列化和反序列化也是基于protocol buffer的因为protocol buffer的特殊性所以gRPC框架是跨语言的通信框架(与编程语言无关性)也就是说用Java开发的基于gRPC的服务可以用GoLang编程语言调用 gRPC同时支持同步调用和异步调用同步RPC调用时会一直阻塞直到服务端处理完成返回结果异步RPC是客户端调用服务端时不等待服务段处理完成返回而是服务端处理完成后主动回调客户端告诉客户端处理完成 gRPC是基于http2协议实现的http2协议提供了很多新的特性并且在性能上也比http1提搞了许多所以gRPC的性能是非常好的 gRPC并没有直接实现负载均衡和服务发现的功能但是已经提供了自己的设计思路。已经为命名解析和负载均衡提供了接口 基于http2协议的特性gRPC允许定义如下四类服务方法 一元RPC客户端发送一次请求等待服务端响应结构会话结束就像一次普通的函数调用这样简单服务端流式RPC客户端发起一起请求服务端会返回一个流客户端会从流中读取一系列消息直到没有结果为止客户端流式RPC客户端提供一个数据流并写入消息发给服务端一旦客户端发送完毕就等待服务器读取这些消息并返回应答双向流式RPC客户端和服务端都一个数据流都可以通过各自的流进行读写数据这两个流是相互独立的客户端和服务端都可以按其希望的任意顺序独写 gRPC的使用场景 低延迟高度可扩展的分布式系统 开发与云服务器通信的客户端 设计一个准确高效且与语言无关的新协议时 分层设计以实现扩展例如。身份验证负载平衡日志记录和监控等 谷歌长期以来一直在gRPC中使用很多基础技术和概念。目前正在谷歌的几个云产品和谷歌面向外部的API中使用。SquareNetflixCoreOSDockerCockroachDBCiscoJuniper Networks以及许多其他组织和个人也在使用它。 gRPC的数据封装和数据传输问题 这里我们主要介绍pb的工作方式即怎样封装数据 数据封装 gRPC 使用的是自己的封装方式 Protocol Buffer简称ProtoBuf是Google开发的一种跨语言、跨平台、可扩展的用于序列化数据协议。 下面是一个protoBuf 的样例 // XXXX.proto // rpc服务的类 service关键字 Test服务类名 service Test { // rpc 关键字rpc的接口 rpc HowRpcDefine (Request) returns (Response) ; // 定义一个RPC方法 } // message 类c class message Request { //类型 | 字段名字| 标号 int64 user_id 1; string name 2; } message Response { repeated int64 ids 1; // repeated 表示数组 Value info 2; // 可嵌套对象 mapint, Value values 3; // 可输出map映射 } message Value { bool is_man 1; int age 2; }以上是一个使用样例包含方法定义、入参、出参。可以看出有几个明确的特点 有明确的类型支持的类型有多种每个field会有名字每个field有一个数字标号一般按顺序排列(下文编解码会用到这个点)能表达数组、map映射等类型通过嵌套message可以表达复杂的对象方法、参数的定义落到一个.proto 文件中依赖双方需要同时持有这个文件并依此进行编解码 protobuf作为一个以跨语言为目标的序列化方案protobuf能做到多种语言以同一份proto文件作为约定不用A语言写一份B语言写一份各个依赖的服务将proto文件原样拷贝一份即可。 但.proto文件并不是代码不能执行要想直接跨语言是不行的必须得有对应语言的中间代码才行中间代码要有以下能力 将message转成对象例如C里是classgolang里是struct需要各自表达后才能被理解需要有进行编解码的代码能解码内容为自己语言的对象、能将对象编码为对应的数据 在完成数据封装之后我们就准备好了将它传输出去接下来就是数据传输了。 数据传输 grpc采用HTTP2.0相对于HTTP1.0 在 更快的传输 和 更低的成本 两个目标上做了改进。有以下几个基本点 HTTP2 未改变HTTP的语义(如GET/POST等)只是在传输上做了优化引入帧、流的概念在TCP连接中可以区分出多个request/response一个域名只会有一个TCP连接借助帧、流可以实现多路复用降低资源消耗引入二进制编码降低header带来的空间占用 HTTP1.1核心问题在于在同一个TCP连接中没办法区分response是属于哪个请求一旦多个请求返回的文本内容混在一起则没法区分数据归属于哪个请求所以请求只能一个个串行排队发送。这直接 导致了TCP资源的闲置。 HTTP2为了解决这个问题提出了 流 的概念每一次请求对应一个流有一个唯一ID用来区分不同的请求。基于流的概念进一步提出了 帧 一个请求的数据会被分成多个帧方便进行数据分割传输每个帧都唯一属于某一个流ID将帧按照流ID进行分组即可分离出不同的请求。这样同一个TCP连接中就可以同时并发多个请求不同请求的帧数据可穿插在一起根据流ID分组即可。HTTP2.0基于这种二进制协议的乱序模式 (Duplexing)直接解决了HTTP1.1的核心痛点通过这种复用TCP连接的方式不用再同时建多个连接提升了TCP的利用效率。 总结 传输使用 http2 协议是在tcp链接完成之后再在应用层发送时的一个协议通过流 ID 和 帧报文的两个概念 解决了传输拥塞的问题。我们将这种方式称之为 tcp链接复用。
http://www.zqtcl.cn/news/625087/

相关文章:

  • 阿里云网站建设方案书中山市公司企业网站的选择
  • 网站建设管理工作制度知名网站建设加盟合作
  • 网站定制公司推荐wordpress 插件 封面
  • 企业手机网站建设行情做外贸哪个网站比较好2017
  • 专业网站制作电话软件推广
  • 免费建站系统博客海外网站搭建
  • 网站建设与制作视频教学站酷网图片
  • 网站开发还有哪些万维网申请网站域名
  • 做网站费用上海判断网站做的好坏
  • 有了域名和空间怎么建网站哪些公司需要网页电商设计师
  • 网站开站备案深圳创业补贴10万
  • 圆通我做网站拉上海建站系统
  • 对于做网站有什么要求新闻发布会视频
  • 网站建设专业就业前景成都房产信息网 官网
  • 西宁网站建设公司排行网站查询域名ip解析
  • 柳州企业网站开发公司如何做网站首页图
  • 刷赞网站空间免费深圳网站制作公司排名
  • 网站内部优化策略获取网站的路径
  • 网站群 优点今天西安最新通告
  • 惠济免费网站建设设计制作的广告公司
  • 做一个网站建设装潢设计属于什么专业
  • 水处理网站源码注册销售公司流程和费用
  • 诸城网站建设0536s整站优化seo排名点击
  • 企业建设网站需注意哪些内容苏州网站怎么做
  • 浏览器打开网站网站推广软件工具
  • 网站主题编辑工具WordPress公司网站策划方案
  • 做旅游网站选什么空间搜索引擎优化策略有哪些
  • 网站备案多少钱安全网站建设与服务的关系
  • 手机端网页设计尺寸规范优化seo排名
  • 做网站业务提成多少厦门十大装修公司排名榜