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

网站建设中的背景图片模板成都软件开发公司排名

网站建设中的背景图片模板,成都软件开发公司排名,百度竞价推广,网站设计流程包括文章目录 GRPC基础概念#xff1a;Protocol Buffers#xff1a;proto 基础语法#xff1a;调用类型#xff1a; Spring boot 整合 grpc项目结构#xff1a;整合代码#xff1a;父 pomproto 模块服务端#xff1a;客户端#xff1a;实际调用#xff1a; 原生集成 GRPC基… 文章目录 GRPC基础概念Protocol Buffersproto 基础语法调用类型 Spring boot 整合 grpc项目结构整合代码父 pomproto 模块服务端客户端实际调用 原生集成 GRPC基础概念 GRPC是google开源的一个高性能、跨语言的RPC框架基于HTTP2协议基于protobuf 3.x基于Netty 4.x. Protocol Buffers 一个跨语言、跨平台的具有可扩展机制的序列化数据工具。也就是说我在ubuntu下用python语言序列化一个对象并使用http协议传输到使用java语言的android客户端java使用对用的代码工具进行反序列化也可以得到对应的对象 proto 基础语法 //指定proto3语法 syntax proto3; //指定作用域 package xxx; //java_multiple_files true; 表示在生成Java代码时每个.proto文件都会生成一个独立的Java文件 //声明 rpc 服务接口 //关键字: service 声明需要生成的服务接口类 service Greeter {// 关键字: rpc 声明服务方法,包括方法名、请求消息(请求体)、相应消息(响应体)rpc SayHello(HelloRequest) returns (HelloResponse); } //声明请求、响应消息 //关键字: message 声明请求体和响应体 message HelloRequest {//标识号 1//编号的范围为1 ~ 536,870,911(2^29-1)其中19000~19999不可用。因为Protobuf协议的实现过程中对预留了这些编号string name 1;//表示一个人有多个号码repeated string phone 3; }message HelloResponse {string message 1; }调用类型 Unary RPC 一元RPC调用也叫简单RPC调用 rpc SayHello(HelloRequest) returns (HelloResponse);【服务端 Server Stream RPC】流式RPC. 客户端向服务端发送单个请求服务端以流的方式返回一系列消息。客户端从流中读取消息直到没有更多的消息。当然返回的消息当然不是乱序的gRPC保证单个请求中的消息顺序 rpc LotsOfReplies(HelloRequest) returns (stream HelloResponse);【客户端 Client Stream RPC】流式RPC调用。客户端向服务端请求一系列的消息一旦客户端完成消息写入就会等待服务端读取所有消息并处理它们。gRPC同样会保证单个请求中消息的顺序性 rpc LotsOfGreetings(stream HelloRequest) returns (HelloResponse);【双向流式调用 Bidirectional Streaming RPC】就是客户端和服务端均以流的方式进行读写消息。这两个流式完全独立的因此服务端和客户端可以按照他们喜欢的方式写入和读取流。比如服务端可以在等待所有的客户端消息发送到后再处理也可以交替读取请求、写入响应信息等。当然每个流中的消息顺序是可以保证的。 rpc BidiHello(stream HelloRequest) returns (stream HelloResponse);Channels通道 gRPC通道提供了一条链接到指定主机和端口号的服务端的链接。他在创建客户端stub的时候使用。客户端可以指定通道参数来修改gRPC的默认行为例如打开或者关闭消息压缩。一个通道是有连接和空闲两个状态的 mvn 插件整合proto编译生成代码 buildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdconfigurationexcludesexcludegroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/exclude/excludes/configuration/plugin!-- 生成插件 --plugingroupIdorg.xolstice.maven.plugins/groupIdartifactIdprotobuf-maven-plugin/artifactIdversion0.6.1/versionconfigurationprotocArtifactcom.google.protobuf:protoc:3.5.1:exe:${os.detected.classifier}/protocArtifactpluginIdgrpc-java/pluginIdpluginArtifactio.grpc:protoc-gen-grpc-java:1.11.0:exe:${os.detected.classifier}/pluginArtifactprotoSourceRoot${project.basedir}/src/main/proto/protoSourceRoot!--设置grpc生成代码到指定路径--outputDirectory${project.basedir}/src/main/java/outputDirectory!--生成代码前是否清空目录--clearOutputDirectoryfalse/clearOutputDirectory/configurationexecutionsexecutiongoalsgoalcompile/goalgoalcompile-custom/goal/goals/execution/executions/plugin/pluginsextensionsextensiongroupIdkr.motd.maven/groupIdartifactIdos-maven-plugin/artifactIdversion1.6.2/version/extension/extensions/buildSpring boot 整合 grpc 大致流程 项目结构 整合代码 父 pom project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.7.17/versionrelativePath/ !-- lookup parent from repository --/parentgroupIdcom.xiaoshu/groupIdartifactIdgrpc-demo/artifactIdversion1.0-SNAPSHOT/versionpackagingpom/packagingnamegrpc-demo/namemodulesmodulegrpc-server/modulemodulegrpc-client/modulemodulegrpc-proto/module/modulespropertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncodingproject.reporting.outputEncodingUTF-8/project.reporting.outputEncodingjava.version1.8/java.versiongrpc.version2.15.0.RELEASE/grpc.version/properties!-- 通用依赖 --dependenciesdependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion1.18.10/versionscopeprovided/scope/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency/dependenciesdependencyManagementdependenciesdependencygroupIdnet.devh/groupIdartifactIdgrpc-spring-boot-starter/artifactIdversion${grpc.version}/versiontypepom/typescopeimport/scope/dependencydependencygroupIdnet.devh/groupIdartifactIdgrpc-server-spring-boot-starter/artifactIdversion${grpc.version}/versiontypepom/typescopeimport/scope/dependencydependencygroupIdnet.devh/groupIdartifactIdgrpc-client-spring-boot-starter/artifactIdversion${grpc.version}/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagementbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/build/project proto 模块 syntax proto3;package com.ht.meta; // 生成类的包名 option java_multiple_files true; // 生成代码位置 option java_package com.meta; // 定义的所有消息、枚举和服务生成对应的多个类文件而不是以内部类的形式出现 option java_outer_classname HtMetaInfoSyncProto;service HtMetaInfoSyncService {rpc syncMeta (HtMetaSyncRequest) returns (HtMetaSyncResponse) {} }//同步类型 enum SyncType {ADD 0; // 新增DEL 1; // 删除EDIT 2; // 修改 }//同步Request message HtMetaSyncRequest {//json内容string syncJson 1;//同步类型SyncType syncType 2; }//响应Response message HtMetaSyncResponse {//响应码string code 1;//提示string msg 2; }project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdcom.xiaoshu/groupIdartifactIdgrpc-demo/artifactIdversion1.0-SNAPSHOT/version/parentartifactIdgrpc-proto/artifactIdpackagingjar/packagingnamegrpc-proto/namepropertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncoding/propertiesdependenciesdependencygroupIdnet.devh/groupIdartifactIdgrpc-spring-boot-starter/artifactIdversion${grpc.version}/version/dependency/dependenciesbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdconfigurationexcludesexcludegroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/exclude/excludes/configuration/plugin!-- 生成插件 --plugingroupIdorg.xolstice.maven.plugins/groupIdartifactIdprotobuf-maven-plugin/artifactIdversion0.6.1/versionconfigurationprotocArtifactcom.google.protobuf:protoc:3.5.1:exe:${os.detected.classifier}/protocArtifactpluginIdgrpc-java/pluginIdpluginArtifactio.grpc:protoc-gen-grpc-java:1.11.0:exe:${os.detected.classifier}/pluginArtifactprotoSourceRoot${project.basedir}/src/main/proto/protoSourceRoot!--设置grpc生成代码到指定路径--outputDirectory${project.basedir}/src/main/java/outputDirectory!--生成代码前是否清空目录--clearOutputDirectoryfalse/clearOutputDirectory/configurationexecutionsexecutiongoalsgoalcompile/goalgoalcompile-custom/goal/goals/execution/executions/plugin/pluginsextensionsextensiongroupIdkr.motd.maven/groupIdartifactIdos-maven-plugin/artifactIdversion1.6.2/version/extension/extensions/build/project 服务端 project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdcom.xiaoshu/groupIdartifactIdgrpc-demo/artifactIdversion1.0-SNAPSHOT/version/parentartifactIdgrpc-server/artifactIdpackagingjar/packagingnamegrpc-server/namepropertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncoding/propertiesdependenciesdependencygroupIdcom.xiaoshu/groupIdartifactIdgrpc-proto/artifactIdversion1.0-SNAPSHOT/version/dependencydependencygroupIdnet.devh/groupIdartifactIdgrpc-server-spring-boot-starter/artifactIdversion${grpc.version}/version/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.28/version/dependency!-- fastjson --dependencygroupIdcom.alibaba/groupIdartifactIdfastjson/artifactIdversion1.2.83/version/dependency/dependencies/project server:port: 8080spring:application:name: spring-boot-grpc-server# gRPC有关的配置这里只需要配置服务端口号 grpc:server:port: 9898服务端代码 import com.meta.HtMetaInfoSyncServiceGrpc; import com.meta.HtMetaSyncRequest; import com.meta.HtMetaSyncResponse; import com.meta.SyncType; import com.util.JsonUtil; import com.vo.HtMetaClusterInfoVo; import io.grpc.stub.StreamObserver; import lombok.extern.slf4j.Slf4j; import net.devh.boot.grpc.server.service.GrpcService; import java.util.List;/*** author 何永豪* className HtMetaSyncService* description TODO* date 2023/11/6 15:25*/ Slf4j GrpcService public class HtMetaSyncService extends HtMetaInfoSyncServiceGrpc.HtMetaInfoSyncServiceImplBase {Overridepublic void syncMeta(HtMetaSyncRequest request, StreamObserverHtMetaSyncResponse responseObserver) {String syncJson request.getSyncJson();log.info(接收到json{},syncJson);ListHtMetaClusterInfoVo list JsonUtil.toList(syncJson, HtMetaClusterInfoVo.class);SyncType syncType request.getSyncType();int number syncType.getNumber();log.info(同步类型{},number);HtMetaSyncResponse syncResponse HtMetaSyncResponse.newBuilder().setCode(1000).setMsg(同步成功).build();responseObserver.onNext(syncResponse);responseObserver.onCompleted();}}客户端 project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdcom.xiaoshu/groupIdartifactIdgrpc-demo/artifactIdversion1.0-SNAPSHOT/version/parentartifactIdgrpc-client/artifactIdpackagingjar/packagingnamegrpc-client/namepropertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncoding/propertiesdependenciesdependencygroupIdcom.xiaoshu/groupIdartifactIdgrpc-proto/artifactIdversion1.0-SNAPSHOT/version/dependencydependencygroupIdnet.devh/groupIdartifactIdgrpc-client-spring-boot-starter/artifactIdversion${grpc.version}/version/dependency/dependencies/project yml server:port: 8088spring:application:name: local-clientgrpc:client:# gRPC配置的名字GrpcClient注解会用到local-grpc-server:# gRPC服务端地址address: static://127.0.0.1:9898enableKeepAlive: truekeepAliveWithoutCalls: true#认证类型无加密negotiationType: plaintext客户端stub import com.meta.HtMetaInfoSyncServiceGrpc; import com.meta.HtMetaSyncRequest; import com.meta.HtMetaSyncResponse; import com.meta.SyncType; import io.grpc.StatusRuntimeException; import net.devh.boot.grpc.client.inject.GrpcClient; import org.springframework.stereotype.Service;/*** author xiaoshu*/ Service public class HtMetaInfoSyncClient {GrpcClient(local-grpc-server)private HtMetaInfoSyncServiceGrpc.HtMetaInfoSyncServiceBlockingStub stub;public String syncMeta(final String json,final SyncType syncType) {try {HtMetaSyncResponse htMetaSyncResponse stub.syncMeta((HtMetaSyncRequest.newBuilder().setSyncJson(json).setSyncType(syncType).build()));String code htMetaSyncResponse.getCode();String msg htMetaSyncResponse.getMsg();return code:msg;} catch (final StatusRuntimeException e) {return FAILED with e.getStatus().getCode().name();}}}实际调用 Autowired private HtMetaInfoSyncClient htMetaInfoSyncClient;RequestMapping(/htMetaSync) public String htMetaSync() {String json;return htMetaInfoSyncClient.syncMeta(json, SyncType.ADD); }原生集成 project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.7.14/versionrelativePath/ !-- lookup parent from repository --/parentgroupIdcom.xiaoshuzxc/groupIdartifactIdgrpc-native-api/artifactIdpackagingjar/packagingnamegrpc-native-api/namedescriptiongrpc原生api整合方式/descriptionpropertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncodinggrpc.version1.29.0/grpc.versionproto.version3.12.0/proto.versionnetty.tcnative.version2.0.30.Final/netty.tcnative.version/propertiesdependencyManagementdependenciesdependencygroupIdio.grpc/groupIdartifactIdgrpc-bom/artifactIdversion${grpc.version}/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagementdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter/artifactId/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-configuration-processor/artifactIdoptionaltrue/optional/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdcom.xiaoshu/groupIdartifactIdgrpc-proto/artifactIdversion1.0-SNAPSHOT/version/dependencydependencygroupIdio.grpc/groupIdartifactIdgrpc-protobuf/artifactId/dependencydependencygroupIdio.grpc/groupIdartifactIdgrpc-stub/artifactId/dependencydependencygroupIdio.grpc/groupIdartifactIdgrpc-netty/artifactId/dependencydependencygroupIdio.netty/groupIdartifactIdnetty-tcnative-boringssl-static/artifactIdversion${netty.tcnative.version}/versionscoperuntime/scope/dependency/dependencies /project import org.springframework.stereotype.Service; import java.lang.annotation.*;Target(ElementType.TYPE) Retention(RetentionPolicy.RUNTIME) Documented Service public interface GrpcService {}启动grpc服务监听 import com.annotation.GrpcService; import io.grpc.BindableService; import io.grpc.Server; import io.grpc.netty.GrpcSslContexts; import io.grpc.netty.NettyServerBuilder; import io.netty.handler.ssl.ClientAuth; import io.netty.handler.ssl.SslContextBuilder; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.boot.CommandLineRunner; import org.springframework.context.support.AbstractApplicationContext; import org.springframework.core.type.AnnotatedTypeMetadata; import javax.annotation.Resource; import java.io.File; import java.io.IOException; import java.lang.annotation.Annotation; import java.util.Map; import java.util.stream.Stream;/*** author 何永豪* className GrpcServer* description TODO* date 2023/11/7 15:56*/ Slf4j public class GrpcServer implements CommandLineRunner, DisposableBean {private Server server;Resourceprivate AbstractApplicationContext applicationContext;Resourceprivate GrpcProperties grpcProperties;Overridepublic void destroy() {stop();}Overridepublic void run(String... args) throws Exception {start();}private SslContextBuilder getSslContextBuilder(){SslContextBuilder sslContextBuilder SslContextBuilder.forServer(new File(grpcProperties.getServerCertPath()), new File(grpcProperties.getServerPrivateKeyPath()));sslContextBuilder.trustManager(new File(grpcProperties.getServerTrustCertPath()));sslContextBuilder.clientAuth(ClientAuth.REQUIRE);return GrpcSslContexts.configure(sslContextBuilder);}private void start() throws IOException {NettyServerBuilder nettyServerBuilder NettyServerBuilder.forPort(grpcProperties.getPort()); // .sslContext(getSslContextBuilder().build() // );scanBeanWithAnnotation(GrpcService.class, BindableService.class).forEach(e-{BindableService bindableService applicationContext.getBeanFactory().getBean(e, BindableService.class);nettyServerBuilder.addService(bindableService.bindService());});server nettyServerBuilder.build().start();log.info(grpc start listen {},grpcProperties.getPort());Thread thread new Thread(() - {try {GrpcServer.this.blockUntilShutdown();} catch (InterruptedException e) {log.error(grpc server stopped);throw new RuntimeException(e);}});thread.setDaemon(false);thread.start();}private void stop(){if (server !null){server.shutdown();}}private void blockUntilShutdown() throws InterruptedException {if (server !null ){server.awaitTermination();}}private T StreamString scanBeanWithAnnotation(Class? extends Annotation annotionType,ClassT beanType){String[] beanNamesForType applicationContext.getBeanNamesForType(beanType);return Stream.of(beanNamesForType).filter(e-{BeanDefinition beanDefinition applicationContext.getBeanFactory().getBeanDefinition(e);MapString, Object beansWithAnnotation applicationContext.getBeansWithAnnotation(annotionType);if (beansWithAnnotation.containsKey(e)){return true;}else if (beanDefinition.getSource() instanceof AnnotatedTypeMetadata){return AnnotatedTypeMetadata.class.cast(beanDefinition.getSource()).isAnnotated(annotionType.getName());}return false;});}}服务端 Slf4j GrpcService public class HtMetaSyncService extends HtMetaInfoSyncServiceGrpc.HtMetaInfoSyncServiceImplBase {Overridepublic void syncMeta(HtMetaSyncRequest request, StreamObserverHtMetaSyncResponse responseObserver) {String syncJson request.getSyncJson();log.info(接收到json{},syncJson);SyncType syncType request.getSyncType();int number syncType.getNumber();log.info(同步类型{},number);HtMetaSyncResponse syncResponse HtMetaSyncResponse.newBuilder().setCode(1000).setMsg(同步成功).build();responseObserver.onNext(syncResponse);responseObserver.onCompleted();}}客户端 import com.config.GrpcProperties; import com.meta.HtMetaInfoSyncServiceGrpc; import com.meta.HtMetaSyncRequest; import com.meta.HtMetaSyncResponse; import com.meta.SyncType; import io.grpc.ManagedChannel; import io.grpc.StatusRuntimeException; import io.grpc.netty.NettyChannelBuilder; import lombok.SneakyThrows; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.Objects;/*** author xiaoshu*/ Component public class HtMetaInfoSyncClient {Resourceprivate GrpcProperties grpcProperties;SneakyThrowspublic String syncMeta(final String json,final SyncType syncType) {ManagedChannel channel null;try {channelNettyChannelBuilder.forAddress(grpcProperties.getServerIp(),grpcProperties.getPort())//非加密连接.usePlaintext()//加密//.sslContext(grpcProperties.buildClentSslContext()).build();HtMetaInfoSyncServiceGrpc.HtMetaInfoSyncServiceBlockingStub stub HtMetaInfoSyncServiceGrpc.newBlockingStub(channel);HtMetaSyncResponse htMetaSyncResponse stub.syncMeta((HtMetaSyncRequest.newBuilder().setSyncJson(json).setSyncType(syncType).build()));String code htMetaSyncResponse.getCode();String msg htMetaSyncResponse.getMsg();return code:msg;} catch (final StatusRuntimeException e) {return FAILED with e.getStatus().getCode().name();}finally {if (Objects.nonNull(channel)){channel.shutdown();}}} }import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;/*** author 何永豪* className GrpcConfig* description TODO* date 2023/11/7 16:58*/ Configuration public class GrpcConfig {BeanConditionalOnProperty(value grpc.enable,havingValue true,matchIfMissing true)public GrpcServer grpcServer(){return new GrpcServer();}}Component ConfigurationProperties(prefix grpc) Data public class GrpcProperties {private Integer port;private String serverIp;private String serverCertPath;private String serverPrivateKeyPath;private String serverTrustCertPath;private String clientCertPath;private String clientCertChainPath;private String clientPrivateKeyPath;/*public SslContext buildClentSslContext() throws SSLException {SslContextBuilder sslContextBuilder GrpcSslContexts.forClient();sslContextBuilder.trustManager(new File(clientCertPath));sslContextBuilder.keyManager(new File(clientCertChainPath),new File(clientPrivateKeyPath));return sslContextBuilder.build();}*/}server:port: 8077spring:application:name: grpc-apigrpc:#监听端口port: 6100#目标IPserver-ip: 127.0.0.1#ssl配置server-cert-path: /ca/server/server.crtserver-private-key-path: /ca/server/server.pemserver-trust-cert-path: /ca/server/ca.crt
http://www.w-s-a.com/news/675218/

相关文章:

  • 请简述网站制作流程html5网络公司网站模板
  • 海尔集团企业网站建设分析重庆市建设银行网站
  • 介绍公司的网站有哪些广西壮族自治区
  • 网站做rss wordpress9 1短视频安装软件
  • 网站建设价格西安室内设计网站排行榜前十名知乎
  • 用nas建设服务器网站用vs做音乐网站
  • 天津市武清区住房建设网站网站自适应框架
  • 制作移动网站公司网站开发职业规划
  • 网站头部怎样做有气势wordpress 页面 锚
  • 秦皇岛网站建设系统推荐个人网站免费制作
  • 我做夫人那些年网站登录wordpress 扫码付费
  • 网站关键词代码怎么做公司 网站建设
  • 哈尔滨多语言网站建设wordpress分类链接
  • 购物网站项目介绍软件开发流程的五大步骤
  • 做的网站怎么放在网上2008 iis搭建网站
  • 网站维护服务公司上海兼职网站制作
  • 企业做网站需要多少钱湘潭九华网站
  • 嘉兴建站服务微营销官网
  • 比较好的网页模板网站浦项建设(中国)有限公司网站
  • 有趣的个人网站网页设计与制作的岗位职责
  • 有建设网站的软件吗长沙做网站的公司对比
  • 网站的外链接数中铝长城建设有限公司网站
  • 北京建设网站公司网站建设费用 无形资产
  • 适合seo的建站系统如何建立网页
  • 我想自己建立一个网站给大家分享个永久免费的云服务器
  • 怎样做网站和网站的友情链接官网优化 报价
  • 购买网站空间大小聊城网站空间公司
  • 做像美团淘宝平台网站多少钱开发网站企业
  • 网站建设前期费用二手购物网站策划书
  • dede学校网站百度联盟是什么