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

大宇网络做网站怎么样/网络营销推广的要点

大宇网络做网站怎么样,网络营销推广的要点,dwcs3做网站,唐山做网站的电话目录 RPC 远程调用的说明作用:像调用本地方法一样调用远程方法和直接HTTP调用的区别:调用模型图示: Dubbo 框架说明Dubbo Go 介绍应用 Dubbo Go环境安装(Mac 系统)安装 Go语言环境安装 序列化工具protoc安装 dubbogo-c…

目录

  • RPC 远程调用的说明
    • 作用:像调用本地方法一样调用远程方法
    • 和直接HTTP调用的区别:
    • 调用模型图示:
  • Dubbo 框架说明
  • Dubbo Go 介绍
  • 应用 Dubbo Go
    • 环境安装(Mac 系统)
      • 安装 Go语言环境
      • 安装 序列化工具protoc
      • 安装 dubbogo-cli 以及相关插件
        • ❎ 解决报错:`zsh: command not found: protoc-gen-go`,而其他两个工具都能正常输出版本号信息。
          • 解决:运行 `brew install protoc-gen-go` 直接安装 protoc-gen-go
    • 完成一次自己定义接口的RPC调用
      • 拉起一个注册中心-Nacos,如果有现成的,本步骤可忽略,这里用docker快速启动一个nacos
        • ❎ 解决报错:`no matching manifest for linux/arm64/v8 in the manifest list entries`
          • 原因:如下图,nacos默认不支持在ARM架构安装。只有AMD64版本的。
          • 解决:去 docker hub 上搜索支持ARM架构的镜像。
      • 服务端实现
        • 1. 创建一个IDC服务(服务端项目), `dubbogo-cli newApp xxx`
        • 2. 定义公共接口(只定义,不实现),api/api.proto 修改后如下:
        • 3. 生成代码 api_triple.pb.go、api.pb.go (通过运行 `protoc --go_out=. --go-triple_out=. ./api.proto`)
        • 4. 实现公共接口,pkg/service/service.go 修改后的代码如下:
        • 5. 编写 conf/dubbogo.yaml 配置
        • 6. 配置环境变量`DUBBO_GO_CONFIG_PATH`
          • 方式1:在控制台,设置 DUBBO_GO_CONFIG_PATH 环境变量
          • 方式2:在代码中,使用命令行参数指定配置文件路径
        • 7. 最后,启动服务端
      • 客户端使用
        • 1. 创建一个客户端项目,`go mod init 客户端项目包名`
        • 2. 复制服务端的api文件夹给客户端
        • 3. 构造客户端项目,目录如下:
        • 4. 编写 cmd/client.go 的客户端远程调用代码
        • 5. 编写 conf/dubbogo.yml 配置
        • 6. 配置环境变量`DUBBO_GO_CONFIG_PATH`
          • 方式1:在控制台,设置 DUBBO_GO_CONFIG_PATH 环境变量
          • 方式2:在代码中,使用命令行参数指定配置文件路径
        • 7. 最后,运行client客户端

RPC 远程调用的说明

作用:像调用本地方法一样调用远程方法

和直接HTTP调用的区别:

  1. 对开发者更透明,减少了很多的沟通成本。
  2. RPC向远程服务器发送请求时,未必要使用 HTTP 协议,比如还可以用 TCP / IP,性能更高(内部服务更适用)。

调用模型图示:

在这里插入图片描述

📢 注意:在整个流程中,最终的调用并不是由注册中心来完成的。虽然注册中心会提供信息,但实际上调用方需要自己进行最后的调用动作。注册中心的作用是告诉调用方提供者的地址等信息,然后调用方会根据这些信息来完成最后的调用。

  1. 为什么一定要知道注册中心的地址?
    因为服务提供者需要将自己提供的接口方法告知注册中心,所以它必须知道注册中心的地址,这样才能将自己的信息上报给注册中心,所以必须要配置注册中心。同样的道理,消费者调用方也需要知道注册中心的地址,以便将注册中心的地址配置到项目中。

  2. IDL是什么?
    IDL(接口定义语言)是一种约定俗成的语言,用于定义接口和数据结构的语法。它是一种人为约定的语言,通过这种语法,可以明确地定义接口和数据的结构,使各方在交流和协作时能够达成一致。这种约定的语言为不同的系统、平台或语言提供了一种统一的描述方式,使得不同环境下的应用程序能够理解和交互。

Dubbo 框架说明

Dubbo 是一个开源的高性能、轻量级的分布式服务框架,最初由阿里巴巴公司开发并开源。它提供了分布式服务治理、通信框架、智能负载均衡、容错策略等功能,用于帮助开发者构建可扩展、高性能、松耦合的分布式应用。

Dubbo框架,是目前国内非常主流的RPC实现框架。Dubbo底层用的是Triple协议:Triple协议。 —— Dubbo框架官方文档

当前,还有其他类似的框架,比如 GRPC 和 TRPC 等等,这些都是不同的 RPC 远程调用框架,Dubbo 和 GRPC 是比较知名的。

Dubbo 由阿里开发,而 GRPC 是由 Google 开发,TRPC 则是由腾讯开发。

Dubbo Go 介绍

Dubbo Go(也称为 dubbo-go)是 Dubbo 框架的 Go 语言版本,是一个基于 Go 语言开发的分布式服务框架,用于构建高性能、可扩展的分布式应用程序。它提供了与原始 Java 版本类似的功能,允许开发者使用 Go 语言构建分布式应用程序。dubbo-go 可以与 Java 版本的 Dubbo 框架无缝集成,使得在混合语言环境中开发分布式系统更加便捷。

dubbo-go 提供了对 Dubbo 协议的支持,允许 Go 语言服务提供者和消费者之间进行通信,并利用 Dubbo 的治理能力实现服务注册、发现、负载均衡等功能。它也支持多种序列化和网络传输协议,以满足不同场景的需求。

应用 Dubbo Go

环境安装(Mac 系统)

安装 Go语言环境

go version >= go 1.15。
【Go 语言官网下载地址】

安装 序列化工具protoc

  1. 使用Homebrew安装protoc:
    brew install protobuf
    
    这将会安装 protobuf 和 protoc编译器。
  2. 验证安装:
    protoc --version
    
    如果一切正常,将显示protoc的版本信息。

安装 dubbogo-cli 以及相关插件

  1. 执行以下指令安装dubbogo-cli 至 $GOPATH/bin (控制台输入go env 可以看到GOPATH目录所在)
    $ export GOPROXY="https://goproxy.cn"
    $ go install github.com/dubbogo/dubbogo-cli@latest
    $ dubbogo-cli
    hello
    
  2. 安装依赖的工具插件
    dubbogo-cli install all    
    
  3. 确保上述安装的工具位于在系统环境变量内
    $ protoc --version
    libprotoc 24.2$ protoc-gen-go --version
    protoc-gen-go v1.31.0$ protoc-gen-go-triple --version
    protoc-gen-go-triple 1.0.8
    

❎ 解决报错:zsh: command not found: protoc-gen-go,而其他两个工具都能正常输出版本号信息。

解决:运行 brew install protoc-gen-go 直接安装 protoc-gen-go

运行下面命令(For mac)直接安装 protoc-gen-go,然后再次运行 protoc-gen-go --version 检测正常了。

brew install protoc-gen-go

完成一次自己定义接口的RPC调用

这里使用 IDL(接口调用语言)的方式使用dubbo:创建一个公共的接口定义文件,服务提供者和消费者读取这个文件。优点是跨语言。

拉起一个注册中心-Nacos,如果有现成的,本步骤可忽略,这里用docker快速启动一个nacos

Nacos 官方文档

git clone https://github.com/nacos-group/nacos-docker.git
cd nacos-docker
docker-compose -f example/standalone-derby.yaml up

❎ 解决报错:no matching manifest for linux/arm64/v8 in the manifest list entries

原因:如下图,nacos默认不支持在ARM架构安装。只有AMD64版本的。

在这里插入图片描述

解决:去 docker hub 上搜索支持ARM架构的镜像。

在这里插入图片描述

# 下载镜像
$ docker pull nacos/nacos-server:v2.1.2-slim
# 查看下载的镜像
$ docker images
# 创建 docker-compose.yml
$ vim docker-compose.yml
# 启动该镜像

编写 docker-compose $ vim docker-compose.yml

version: '2'
services:nacos:image: nacos/nacos-server:v2.1.2-slim                        # 镜像`nacos/nacos-server:v2.1.2-slim`container_name: nacos                                        # 容器名为'nacos'restart: always                                              # 指定容器退出后的重启策略为始终重启volumes:                                                     # 数据卷挂载路径设置,将本机目录映射到容器目录- ./data/nacos/logs:/home/nacos/logsenvironment:TZ: Asia/ShanghaiLANG: en_US.UTF-8MODE: standalone # 单机模式启动ports:                              # 映射端口- "8848:8848"cpu_shares: 4mem_limit: 2048M

启动 nacos $ docker compose up
启动成功后,可以看到如下界面:
在这里插入图片描述
可以去 nacos 注册中心看一下,访问 http://自己服务的IP地址:8848/nacos/index.html
默认用户名和密码都是 nacos

服务端实现

1. 创建一个IDC服务(服务端项目), dubbogo-cli newApp xxx

$ dubbogo-cli newApp IDC
$ cd IDC

2. 定义公共接口(只定义,不实现),api/api.proto 修改后如下:

syntax = "proto3";
package api;option go_package = "./;api";service Generator {rpc GetID (GenReq) returns (GenResp) {}
}message GenReq {string appId = 1;
}message GenResp {string id = 1;
}

3. 生成代码 api_triple.pb.go、api.pb.go (通过运行 protoc --go_out=. --go-triple_out=. ./api.proto

$ cd api
$ protoc --go_out=. --go-triple_out=. ./api.proto

4. 实现公共接口,pkg/service/service.go 修改后的代码如下:

type GeneratorServerImpl struct {api.UnimplementedGeneratorServer
}func (s *GeneratorServerImpl) GetID(ctx context.Context, in *api.GenReq) (*api.GenResp, error) {logger.Infof("Dubbo-go GeneratorProvider AppId = %s\n", in.AppId)uuid, err := uuid.NewV4()if err != nil {logger.Infof("Dubbo-go GeneratorProvider get id err = %v\n", err)return nil, err}return &api.GenResp{Id: uuid.String()}, nil
}func init() {config.SetProviderService(&GeneratorServerImpl{})
}

5. 编写 conf/dubbogo.yaml 配置

dubbo:registries:nacos:protocol: nacosaddress: 127.0.0.1:8848protocols:triple:name: triport: 20000provider:services:GeneratorServerImpl:interface: "" # read from stub

6. 配置环境变量DUBBO_GO_CONFIG_PATH

Dubbo-go 并没有提供直接设置配置文件路径的函数。Dubbo-go 配置文件是通过环境变量 DUBBO_GO_CONFIG_PATH 或者在启动应用程序时通过命令行参数传递的。

方式1:在控制台,设置 DUBBO_GO_CONFIG_PATH 环境变量
export DUBBO_GO_CONFIG_PATH=conf/dubbogo.yaml 
方式2:在代码中,使用命令行参数指定配置文件路径

将 “path/to/config.yaml” 替换为实际的配置文件路径。这样,你可以在运行应用程序时指定不同的配置文件路径。

package mainimport ("flag""fmt""os""dubbo.apache.org/dubbo-go/v3/config"
)func main() {// 使用flag包来处理命令行参数,将-config参数用于指定配置文件路径configFile := flag.String("config", "path/to/config.yaml", "Path to Dubbo-go config file")flag.Parse()// 使用os.Setenv 设置 DUBBO_GO_CONFIG_PATH 环境变量os.Setenv("DUBBO_GO_CONFIG_PATH", *configFile)// 加载 Dubbo-go 配置if err := config.Load(); err != nil {panic(err)}// 在这里执行你的 Dubbo-go 应用程序逻辑fmt.Println("Dubbo-go 应用程序已启动")
}

7. 最后,启动服务端

go run cmd/app.go  

打开nacos的控制台,可以看到服务已经注册
在这里插入图片描述

客户端使用

1. 创建一个客户端项目,go mod init 客户端项目包名

2. 复制服务端的api文件夹给客户端

3. 构造客户端项目,目录如下:

在这里插入图片描述
这里的api 目录与服务端的api目录保持一致。

4. 编写 cmd/client.go 的客户端远程调用代码

var grpcGeneratorImpl = new(api.GeneratorClientImpl)func main() {config.SetConsumerService(grpcGeneratorImpl)if err := config.Load(); err != nil {panic(err)}logger.Info("start to test dubbo")req := &api.GenReq{AppId: "laurence",}reply, err := grpcGeneratorImpl.GetID(context.Background(), req)if err != nil {logger.Error(err)}logger.Infof("get id result: %v\n", reply.Id)
}

5. 编写 conf/dubbogo.yml 配置

dubbo:registries:nacos:protocol: nacosaddress: 127.0.0.1:8848consumer:references:GeneratorClientImpl:protocol: triinterface: ""

6. 配置环境变量DUBBO_GO_CONFIG_PATH

Dubbo-go 并没有提供直接设置配置文件路径的函数。Dubbo-go 配置文件是通过环境变量 DUBBO_GO_CONFIG_PATH 或者在启动应用程序时通过命令行参数传递的。

方式1:在控制台,设置 DUBBO_GO_CONFIG_PATH 环境变量
export DUBBO_GO_CONFIG_PATH=conf/dubbogo.yaml 
方式2:在代码中,使用命令行参数指定配置文件路径

将 “path/to/config.yaml” 替换为实际的配置文件路径。这样,你可以在运行应用程序时指定不同的配置文件路径。

package mainimport ("flag""os"
)func main() {// 使用flag包来处理命令行参数,将-config参数用于指定配置文件路径configFile := flag.String("config", "path/to/config.yaml", "Path to Dubbo-go config file")flag.Parse()// 使用os.Setenv 设置 DUBBO_GO_CONFIG_PATH 环境变量os.Setenv("DUBBO_GO_CONFIG_PATH", *configFile)
}

7. 最后,运行client客户端

go run cmd/client.go

相关文章:

介绍 dubbo-go 并在Mac上安装,完成一次自己定义的接口RPC调用

目录 RPC 远程调用的说明作用:像调用本地方法一样调用远程方法和直接HTTP调用的区别:调用模型图示: Dubbo 框架说明Dubbo Go 介绍应用 Dubbo Go环境安装(Mac 系统)安装 Go语言环境安装 序列化工具protoc安装 dubbogo-c…...

目标检测数据集:摄像头成像吸烟检测数据集(自己标注)

1.专栏介绍 ✨✨✨✨✨✨目标检测数据集✨✨✨✨✨✨ 本专栏提供各种场景的数据集,主要聚焦:工业缺陷检测数据集、小目标数据集、遥感数据集、红外小目标数据集,该专栏的数据集会在多个专栏进行验证,在多个数据集进行验证mAP涨点明显,尤其是小目标、遮挡物精度提升明显的…...

Unity的UI管理器

1、代码 public class UIManager {private static UIManager instance new UIManager();public static UIManager Instance > instance;//存储显示着的面板脚本(不是面板Gameobject),每显示一个面板就存入字典//隐藏的时候获取字典中对…...

Mp4文件提取详细H.264和MP3文件

文章目录 Mp4文件提取为H.264和MP3文件**提取视频为H.264:****提取音频为MP3:** 点赞收藏加关注,追求技术不迷路!!!欢迎评论区互动。 Mp4文件提取为H.264和MP3文件 要将视频分开为H.264(视频编…...

Qt应用程序连接达梦数据库-飞腾PC麒麟V10

目录 前言1 安装ODBC1.1 下载unixODBC源码1.2 编译安装1.4 测试 2 编译QODBC2.1 修改 qsqldriverbase.pri 文件2.2 修改 odbc.pro 文件2.3 编译并安装QODBC 3 Qt应用程序连接达梦数据库测试4 优化ODBC配置,方便程序部署4.1 修改pro文件,增加DESTDIR 变量…...

2023-09-03 LeetCode每日一题(消灭怪物的最大数量)

2023-09-03每日一题 一、题目编号 1921. 消灭怪物的最大数量二、题目链接 点击跳转到题目位置 三、题目描述 你正在玩一款电子游戏,在游戏中你需要保护城市免受怪物侵袭。给你一个 下标从 0 开始 且长度为 n 的整数数组 dist ,其中 dist[i] 是第 i …...

绘图 | MATLAB

目的语法注意事项图片中出现网格grid on放在plot后面在同一图片中绘制多个图例hold on在图形中添加图例legend LineSpec 线性 线型描述线型描述" - "实线" : "点线" - - "虚线" -. "点划线 标记 标记描述标记描述“o”圆圈“squa…...

2023年下半年高项考试学习计划

之前总结 2023年上半年的考试,对于我自己,就是虎头蛇尾,也谈不上太过自信,好好学习了一段时间之后,也就是不再发博文,截止到2022年11月的时候,自己就算是放弃了,没有再主动学习。 结…...

SpringBoot中CommandLineRunner的使用

开发中,你有没有遇到这样的场景,项目启动后,立即需要进行一些操作。比如:加载一些初始化数据、执行一段逻辑代码。你可以使用SpringBoot中CommandLineRunner。它可以在项目启动后,执行CommandLineRunner接口实现类的相…...

<OpenCV> Mat属性

OpenCV的图像数据类型可参考之前的博客:https://blog.csdn.net/thisiszdy/article/details/120238017 OpenCV-Mat类型的部分属性如下: size:矩阵的大小, s i z e ( c o l s , r o w s ) size(cols,rows) size(cols,rows)&#xf…...

LAMP 综合实验

LAMP 综合实验 一.实验目标 实验目标如下: 实现 LAMP 架构 实现数据库主从复制 实现 NFS 服务器存储 wordpress 文件 实现备份服务器实时备份 NFS 服务器文件 实现日志集中存储 实现 loganalyzer 分析展示日志 二.实验准备 2.1 实验环境 实验环境: 虚拟机版本: VM…...

JavaScript发展历程

目录 一、起源(1995-1997) 二、发展(1997-2005) 三、进化——Ajax与Web 2.0(2005-2010年) 四、移动互联网与现代化(2010年至今) 结论 JavaScript是一种广泛使用的网络编程语言&…...

LP(六十九)智能文档助手升级

本文在笔者之前研发的大模型智能文档问答项目中,开发更进一步,支持多种类型文档和URL链接,支持多种大模型接入,且使用更方便、高效。 项目介绍 在文章NLP(六十一)使用Baichuan-13B-Chat模型构建智能文档中…...

VIM统计搜索关键词命令

:%s/./&/gn 统计字符数 :%s/\i\/&/gn 统计单词数 :%s/^//n 统计行数 :%s/keyword/&/g 统计任何地方出现的 "keyword" :%s/keyword/&/gn 统计任何地方出现的 "keyword" :%s/keyword/:这部分是 Vi…...

0017Java程序设计-spr农业过程化管理系统

摘 要目 录系统设计开发环境 摘 要 本农业过程化管理系统就是建立在充分利用现在完善科技技术这个理念基础之上,并使用IT技术进行对农业过程化的管理,从而保证种植户能种植出优质的农作物,可以实现农业过程化的在线管理,这样保证…...

以可视化方式解释 Go 并发 - 通道

在并发编程中,许多编程语言采用共享内存/状态模型。然而,Go 通过实现 通信顺序进程 (CSP) 区别于众多语言。在 CSP 中,一个程序由并行的进程组成,这些进程不共享状态,而是使用通道进行通信和同步它们的操作。因此&…...

kafka学习-生产者

目录 1、消息生产流程 2、生产者常见参数配置 3、序列化器 基本概念 自定义序列化器 4、分区器 默认分区规则 自定义分区器 5、生产者拦截器 作用 自定义拦截器 6、生产者原理解析 1、消息生产流程 2、生产者常见参数配置 3、序列化器 基本概念 在Kafka中保存的数…...

【Python】设计模式

设计模式分为三种类型,共23类。 创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。行为型模式:模版方法模式、命令模…...

C++ 数字

C 数字 通常,当我们需要用到数字时,我们会使用原始的数据类型,如 int、short、long、float 和 double 等等。这些用于数字的数据类型,其可能的值和数值范围,我们已经在 C 数据类型一章中讨论过。 C 定义数字 我们已…...

code阶段——gitgitlab安装

在code阶段,我们需要将不同版本的代码存储到一个仓库中,常见的版本控制工具就是SVN或者Git,这里我们采用Git作为版本控制工具,GitLab作为远程仓库。 Git安装 https://git-scm.com/(傻瓜式安装) GitLab安…...

C 风格文件输入/输出---无格式输入/输出

C 标准库的 C I/O 子集实现 C 风格流输入/输出操作。 <cstdio> 头文件提供通用文件支持并提供有窄和多字节字符输入/输出能力的函数&#xff0c;而 <cwchar>头文件提供有宽字符输入/输出能力的函数。 无格式输入/输出 从文件流获取字符 std::fgetc, std::getc …...

Spring-MVC的文件上传下载,及插件的使用(让项目开发更节省时间)

目录 一、概述 ( 1 ) 介绍 ( 2 ) 讲述 二、上传 三、下载 四、jrebel的使用 五、多文件上传 给我们带来什么收获 一、概述 ( 1 ) 介绍 Spring MVC的文件上传下载是指在Spring MVC框架中实现文件的上传和下载功能。文件上传是指将本地计算机上的文件上传到服务器端…...

算法 数据结构 递归冒泡算法 java冒泡算法 优化递归冒泡 数据结构(九)

使用递归算法实现冒泡&#xff1a; package com.nami.algorithm.study.day06;import java.util.Arrays;/*** beyond u self and trust u self.** Author: lbc* Date: 2023-09-05 15:36* email: 594599620qq.com* Description: keep coding*/ public class BubbleSort2 {// p…...

【计算机视觉 | 目标检测】目标检测常用数据集及其介绍(十五)

文章目录 一、STN PLAD (STN Power Line Assets Dataset)二、Satlas三、Street Dataset四、UAVVaste五、UDA-CH (Unsupervised Domain Adaptation on Cultural Heritage)六、USB (Universal-Scale Object Detection Benchmark)七、VEDAI (Vehicle Detection in Aerial Imagery)…...

洛谷P8814:解密 ← CSP-J 2022 复赛第2题

【题目来源】https://www.luogu.com.cn/problem/P8814https://www.acwing.com/problem/content/4732/【题目描述】 给定一个正整数 k&#xff0c;有 k 次询问&#xff0c;每次给定三个正整数 ni&#xff0c;ei&#xff0c;di&#xff0c;求两个正整数 pi&#xff0c;qi&#xf…...

Flutter实现CombineExecutor进行多个异步分组监听,监听第一个异步执行的开始和最后一个异步执行结束时机。

1.场景 我们在调用接口时&#xff0c;很多时候会同时调用多个接口&#xff0c;接口都是异步执行&#xff0c;我们很难知道调用的多个接口哪个会最后执行完成&#xff0c;我们有时候需要对最后一个接口执行完成的时机监听&#xff0c;所以基于该需求&#xff0c;设计了CombineE…...

2023 年最新Java 毕业设计选题题目参考,500道 Java 毕业设计题目,值得收藏

大家好&#xff0c;我是程序员徐师兄&#xff0c;最近有很多同学咨询&#xff0c;说毕业设计了&#xff0c;不知道选怎么题目好&#xff0c;有哪些是想需要注意的。 确实毕设选题实际上对很多同学来说一个大坑&#xff0c; 每年挖坑给自己跳的人太多太多&#xff0c;选题选得好…...

Mac电脑其他文件占用超过一大半的内存如何清理?

mac的存储空间时不时会提示内存已满&#xff0c;查看内存占用比例最大的居然是「其他文件」&#xff0c;「其他文件」是Mac无法识别的格式文件或应用插件扩展等等...如果你想要给Mac做一次彻底的磁盘空间清理&#xff0c;首当其冲可先对「其他文件」下手&#xff0c;那么我们该…...

geopandas 笔记: datasets 数据集

geopandas 自带的几个数据集 1 世界各个国家 import geopandas as gpd import pandas as pdpd.set_option(display.max_rows,None) gpd.read_file(gpd.datasets.get_path(naturalearth_lowres)) pop_est人口数量continent国家所在的大陆name国家的名称iso_a3国家的三个字母的…...

长胜证券:三大拐点共振 看好智能驾驶新一轮行情

摘要 【长胜证券&#xff1a;三大拐点共振 看好智能驾驭新一轮行情】长胜证券研报指出&#xff0c;全球共振&#xff0c;国内智驾商场正迎来三大拐点&#xff1a;1&#xff09;技能上&#xff0c;“BEV Transformer数据闭环”新架构2023年开端上车&#xff0c;使得不依靠高精地…...