前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >最新版基于ZXing的Android扫码库

最新版基于ZXing的Android扫码库

作者头像
xiangzhihong
发布于 2023-04-01 02:35:21
发布于 2023-04-01 02:35:21
5.9K00
代码可运行
举报
文章被收录于专栏:向治洪向治洪
运行总次数:0
代码可运行

ZXingLite

ZXingLite for Android 是ZXing的精简极速版,基于ZXing库优化扫码和生成二维码/条形码功能,扫码界面完全支持自定义,也可一行代码使用默认实现的扫码功能。总之你想要的都在这里。

简单如斯,你不试试? Come on~

Gif 展示

你也可以直接下载 演示App 体验效果

ViewfinderView属性说明

属性

属性类型

默认值

属性说明

maskColor

color

#60000000

扫描区外遮罩的颜色

frameColor

color

#7F1FB3E2

扫描区边框的颜色

cornerColor

color

#FF1FB3E2

扫描区边角的颜色

laserColor

color

#FF1FB3E2

扫描区激光线的颜色

labelText

string

扫描提示文本信息

labelTextColor

color

#FFC0C0C0

提示文本字体颜色

labelTextSize

dimension

14sp

提示文本字体大小

labelTextPadding

dimension

24dp

提示文本距离扫描区的间距

labelTextWidth

dimension

提示文本的宽度,默认为View的宽度

labelTextLocation

enum

bottom

提示文本显示位置

frameWidth

dimension

扫码框宽度

frameHeight

dimension

扫码框高度

laserStyle

enum

line

扫描激光的样式

gridColumn

integer

20

网格扫描激光列数

gridHeight

integer

40dp

网格扫描激光高度,为0dp时,表示动态铺满

cornerRectWidth

dimension

4dp

扫描区边角的宽

cornerRectHeight

dimension

16dp

扫描区边角的高

scannerLineMoveDistance

dimension

2dp

扫描线每次移动距离

scannerLineHeight

dimension

5dp

扫描线高度

frameLineWidth

dimension

1dp

边框线宽度

scannerAnimationDelay

integer

20

扫描动画延迟间隔时间,单位:毫秒

frameRatio

float

0.625f

扫码框与屏幕占比

framePaddingLeft

dimension

0

扫码框左边的内间距

framePaddingTop

dimension

0

扫码框上边的内间距

framePaddingRight

dimension

0

扫码框右边的内间距

framePaddingBottom

dimension

0

扫码框下边的内间距

frameGravity

enum

center

扫码框对齐方式

pointColor

color

#FF1FB3E2

结果点的颜色

pointStrokeColor

color

#FFFFFFFF

结果点描边的颜色

pointRadius

dimension

15dp

结果点的半径

pointStrokeRatio

float

1.2

结果点描边半径与结果点半径的比例

pointDrawable

reference

结果点自定义图片

showPointAnim

boolean

true

是否显示结果点的动画

laserDrawable

reference

扫描激光自定义图片

viewfinderStyle

enum

classic

取景框样式;支持:classic:经典样式(带扫码框那种)、popular:流行样式(不带扫码框)

引入

Gradle:

  1. 在Project的 build.gradle 里面添加远程仓库
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
allprojects {
    repositories {
        //...
        mavenCentral()
    }
}
  1. 在Module的 build.gradle 里面添加引入依赖项
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// AndroidX 版本
implementation 'com.github.jenly1314:zxing-lite:2.3.1'

温馨提示

关于ZXingLite版本与编译的SDK版本要求

使用 v2.3.x 以上版本时,要求 compileSdkVersion >= 33

使用 v2.2.x 以上版本时,要求 compileSdkVersion >= 31

如果 compileSdkVersion < 31 请使用 v2.2.x 以前的版本

对于需兼容 Android 5.0 (N) 以下版本的老项目(即:minSdk<21),可使用1.x旧版本

v1.x 旧版本 v1.1.9

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// AndroidX 版本
implementation 'com.king.zxing:zxing-lite:1.1.9-androidx'

// Android Support 版本
implementation 'com.king.zxing:zxing-lite:1.1.9'

对于 v1.x 版本,如果 JCenter 已关闭, 可使用 JitPack

使用说明

快速实现扫码识别有以下几种方式:

1、直接使用CaptureActivity或者CaptureFragment。(默认的扫码实现)

2、通过继承CaptureActivity或者CaptureFragment并自定义布局。(适用于大多场景,并无需关心扫码相关逻辑,自定义布局时需覆写getLayoutId方法)实现示例:CustomCaptureActivityQRCodeActivity

3、在你项目的Activity或者Fragment中实例化一个CameraScan即可。(适用于想在扫码界面写交互逻辑,又因为项目架构或其它原因,无法直接或间接继承CaptureActivity或CaptureFragment时使用)实现示例:CustomFullScanActivity

4、继承CameraScan自己实现一个,可参照默认实现类DefaultCameraScan,其它步骤同方式3。(扩展高级用法,谨慎使用)

关于 CameraScan

CameraScan 作为相机扫描的(核心)基类;所有与相机扫描相关的都是基于此类来直接或间接进行控制的。

关于 CameraConfig

主要是相机相关的配置;如:摄像头的前置后置、相机预览相关、图像分析相关等配置。

你可以直接库中内置实现的相机配置: CameraConfigAspectRatioCameraConfigResolutionCameraConfig

这里简单说下各自的特点:
  • CameraConfig:默认的相机配置。
  • AspectRatioCameraConfig:根据纵横比配置相机,使输出分析的图像尽可能的接近屏幕的比例
  • ResolutionCameraConfig:根据尺寸配置相机的目标图像大小,使输出分析的图像的分辨率尽可能的接近屏幕尺寸

你也可以自定义或覆写 CameraConfig 中的 options 方法,根据需要定制配置。

这里特别温馨提示:默认配置在未配置相机的目标分析图像大小时,会优先使用:横屏:640 * 480 竖屏:480 * 640;

根据这个图像质量顺便说下默认配置的优缺点:

  • 优点:因为图像质量不高,所以在低配置的设备上使用也能hold住,这样就能尽可能的适应各种设备;
  • 缺点:正是由于图像质量不高,从而可能会对检测识别率略有影响,比如在某些机型上体验欠佳。
  • 结论:在适配、性能与体验之间得有所取舍,找到平衡点。

当使用默认的 CameraConfig 在某些机型上体验欠佳时,你可以尝试使用 AspectRatioCameraConfigResolutionCameraConfig 会有意想不到奇效。

关于 Analyzer

Analyzer 为定义的分析器接口;主要用于分析相机预览的帧数据;通过实现 Analyzer 可以自定义分析过程。

关于 CaptureActivityCaptureFragment

CaptureActivityCaptureFragment 作为扫描预览界面的基类,主要目的是便于快速实现扫码识别。

扫描预览界面内部持有 CameraScan,并处理了 CameraScan 的初始化(如:相机权限、相机预览、生命周期等细节)

使用示例

CameraScan配置示例

CameraScan 里面包含部分支持链式调用的方法,即调用返回是 CameraScan 本身的一些配置建议在调用 startCamera() 方法之前调用。

如果是通过继承 CaptureActivity 或者 CaptureFragment 或其子类实现的相机扫描,可以在 initCameraScan() 方法中获取 CameraScan ,然后根据需要修改相关配置。

示例1:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 获取CameraScan,扫码相关的配置设置。CameraScan里面包含部分支持链式调用的方法,即调用返回是CameraScan本身的一些配置建议在startCamera之前调用。
getCameraScan().setPlayBeep(true)//设置是否播放音效,默认为false
        .setVibrate(true)//设置是否震动,默认为false
        .setCameraConfig(new CameraConfig())//设置相机配置信息,CameraConfig可覆写options方法自定义配置
        .setNeedAutoZoom(false)//二维码太小时可自动缩放,默认为false
        .setNeedTouchZoom(true)//支持多指触摸捏合缩放,默认为true
        .setDarkLightLux(45f)//设置光线足够暗的阈值(单位:lux),需要通过{@link #bindFlashlightView(View)}绑定手电筒才有效
        .setBrightLightLux(100f)//设置光线足够明亮的阈值(单位:lux),需要通过{@link #bindFlashlightView(View)}绑定手电筒才有效
        .bindFlashlightView(ivFlashlight)//绑定手电筒,绑定后可根据光线传感器,动态显示或隐藏手电筒按钮
        .setOnScanResultCallback(this)//设置扫码结果回调,需要自己处理或者需要连扫时,可设置回调,自己去处理相关逻辑
        .setAnalyzer(new MultiFormatAnalyzer(new DecodeConfig()))//设置分析器,DecodeConfig可以配置一些解码时的配置信息,如果内置的不满足您的需求,你也可以自定义实现,
        .setAnalyzeImage(true);//设置是否分析图片,默认为true。如果设置为false,相当于关闭了扫码识别功能
        
// 启动预览(如果是通过继承CaptureActivity或CaptureFragment实现的则无需调用startCamera)
getCameraScan().startCamera();

// 设置闪光灯(手电筒)是否开启,需在startCamera之后调用才有效
getCameraScan().enableTorch(torch);

示例2:(只需识别二维码的配置示例)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 初始化解码配置
DecodeConfig decodeConfig = new DecodeConfig();
decodeConfig.setHints(DecodeFormatManager.QR_CODE_HINTS)//如果只有识别二维码的需求,这样设置效率会更高,不设置默认为DecodeFormatManager.DEFAULT_HINTS
    .setFullAreaScan(false)//设置是否全区域识别,默认false
    .setAreaRectRatio(0.8f)//设置识别区域比例,默认0.8,设置的比例最终会在预览区域裁剪基于此比例的一个矩形进行扫码识别
    .setAreaRectVerticalOffset(0)//设置识别区域垂直方向偏移量,默认为0,为0表示居中,可以为负数
    .setAreaRectHorizontalOffset(0);//设置识别区域水平方向偏移量,默认为0,为0表示居中,可以为负数

// 在启动预览之前,设置分析器,只识别二维码
getCameraScan()
        .setCameraConfig(new AspectRatioCameraConfig(this))//设置相机配置,使用 AspectRatioCameraConfig
        .setVibrate(true)//设置是否震动,默认为false
        .setAnalyzer(new MultiFormatAnalyzer(decodeConfig));//设置分析器,如果内置实现的一些分析器不满足您的需求,你也可以自定义去实现

布局示例

PreviewView 用来预览,布局内至少要保证有 PreviewView,如果是继承 CaptureActivityCaptureFragment,控件id可覆写getPreviewViewId方法自定义

ViewfinderView 用来渲染扫码视图,给用户起到一个视觉效果,本身扫码识别本身没有关系,如果是继承 CaptureActivityCaptureFragment,控件ID可复写getViewfinderViewId方法自定义,默认为 previewView,返回0表示无需 ViewfinderView

ivFlashlight 是布局内置的手电筒,如果是继承 CaptureActivityCaptureFragment,控件id可复写getFlashlightId方法自定义,默认为 ivFlashlight。返回0表示无需内置手电筒。您也可以自己去定义

可自定义布局(覆写getLayoutId方法),布局内至少要保证有 PreviewView

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <androidx.camera.view.PreviewView
        android:id="@+id/previewView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <com.king.zxing.ViewfinderView
        android:id="@+id/viewfinderView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <ImageView
        android:id="@+id/ivFlashlight"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="@dimen/zxl_flashlight_margin_top"
        android:contentDescription="@null"
        android:src="@drawable/zxl_flashlight_selector" />
</FrameLayout>

或在你的布局中添加

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    <include layout="@layout/zxl_capture"/>

代码示例

工具类CodeUtils的使用示例(二维码/条形码)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    // 生成二维码
    CodeUtils.createQRCode(content,600,logo);
    // 生成条形码
    CodeUtils.createBarCode(content, BarcodeFormat.CODE_128,800,200);
    // 解析条形码/二维码
    CodeUtils.parseCode(bitmap);
    // 解析二维码
    CodeUtils.parseQRCode(bitmap);

通过继承CaptureActivity实现扫二维码完整示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class QRCodeActivity extends CaptureActivity {


    @Override
    public int getLayoutId() {
        return R.layout.qr_code_activity;
    }

    @Override
    public void initCameraScan() {
        super.initCameraScan();

        //初始化解码配置
        DecodeConfig decodeConfig = new DecodeConfig();
        decodeConfig.setHints(DecodeFormatManager.QR_CODE_HINTS)//如果只有识别二维码的需求,这样设置效率会更高,不设置默认为DecodeFormatManager.DEFAULT_HINTS
            .setFullAreaScan(false)//设置是否全区域识别,默认false
            .setAreaRectRatio(0.8f)//设置识别区域比例,默认0.8,设置的比例最终会在预览区域裁剪基于此比例的一个矩形进行扫码识别
            .setAreaRectVerticalOffset(0)//设置识别区域垂直方向偏移量,默认为0,为0表示居中,可以为负数
            .setAreaRectHorizontalOffset(0);//设置识别区域水平方向偏移量,默认为0,为0表示居中,可以为负数

        //在启动预览之前,设置分析器,只识别二维码
        getCameraScan()
                .setVibrate(true)//设置是否震动,默认为false
                .setNeedAutoZoom(true)//二维码太小时可自动缩放,默认为false
                .setAnalyzer(new MultiFormatAnalyzer(decodeConfig));//设置分析器,如果内置实现的一些分析器不满足您的需求,你也可以自定义去实现
    }


    /**
     * 扫码结果回调
     * @param result
     * @return 返回false表示不拦截,将关闭扫码界面并将结果返回给调用界面;
     *  返回true表示拦截,需自己处理逻辑。当isAnalyze为true时,默认会继续分析图像(也就是连扫)。
     *  如果只是想拦截扫码结果回调,并不想继续分析图像(不想连扫),请在拦截扫码逻辑处通过调
     *  用{@link CameraScan#setAnalyzeImage(boolean)},
     *  因为{@link CameraScan#setAnalyzeImage(boolean)}方法能动态控制是否继续分析图像。
     *
     */
    @Override
    public boolean onScanResultCallback(Result result) {
        /*
         * 因为setAnalyzeImage方法能动态控制是否继续分析图像。
         *
         * 1. 因为分析图像默认为true,如果想支持连扫,返回true即可。
         * 当连扫的处理逻辑比较复杂时,请在处理逻辑前调用getCameraScan().setAnalyzeImage(false),
         * 来停止分析图像,等逻辑处理完后再调用getCameraScan().setAnalyzeImage(true)来继续分析图像。
         *
         * 2. 如果只是想拦截扫码结果回调自己处理逻辑,但并不想继续分析图像(即不想连扫),可通过
         * 调用getCameraScan().setAnalyzeImage(false)来停止分析图像。
         */
        return super.onScanResultCallback(result);
    }
}

更多使用详情,请查看app中的源码使用示例或直接查看API帮助文档

其他

AndroidManifest

如果你直接使用了默认 CaptureActivity ,则需在你项目的AndroidManifest中注册 CaptureActivity,配置如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    <activity
        android:name="com.king.zxing.CaptureActivity"
        android:screenOrientation="portrait"
        android:theme="@style/CaptureTheme"/>
JDK版本

需使用JDK8+编译,在你项目中的build.gradle的android{}中添加配置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
compileOptions {
    targetCompatibility JavaVersion.VERSION_1_8
    sourceCompatibility JavaVersion.VERSION_1_8
}
API脱糖

当使用ZXingLite为 v2.3.x 以上版本时,(即:更新zxing至v3.5.1后);如果要兼容Android 7.0 (N) 以下版本(即:minSdk<24),可通过脱糖获得 Java 8 及更高版本 API

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
compileOptions {
    // Flag to enable support for the new language APIs
    coreLibraryDesugaringEnabled true
    // Sets Java compatibility to Java 8
    targetCompatibility JavaVersion.VERSION_1_8
    sourceCompatibility JavaVersion.VERSION_1_8
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dependencies {
    coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.2.2'
}

相关推荐

MLKit 一个强大易用的工具包。通过ML Kit您可以很轻松的实现文字识别、条码识别、图像标记、人脸检测、对象检测等功能。
WeChatQRCode 基于OpenCV开源的微信二维码引擎移植的扫码识别库。

版本说明

v2.x 基于CameraX进行了重构

v2.x 相对于 v1.x 的优势
  • v2.x基于CameraX,抽象整体流程,可扩展性更高。
  • v2.x基于CameraX通过预览裁剪的方式确保预览界面不变形,无需铺满屏幕,就能适配(v1.x通过遍历Camera支持预览的尺寸,找到与屏幕最接近的比例,减少变形的可能性(需铺满屏幕,才能适配))
v2.x 特别说明
  • v2.x如果您是通过继承CaptureActivity或CaptureFragment实现扫码功能,那么动态权限申请相关都已经在CaptureActivity或CaptureFragment处理好了。
  • v2.x如果您是通过继承CaptureActivity或CaptureFragment实现扫码功能,如果有想要修改默认配置,可重写initCameraScan方法,修改CameraScan的配置即可,如果无需修改配置,直接在跳转原界面的onActivityResult 接收扫码结果即可(更多具体详情可参见app中的使用示例)。
v1.x 说明

【v1.1.9】 如果您正在使用 1.x 版本请点击下面的链接查看分支版本,当前 2.x 版本已经基于 CameraX 进行重构,API变化较大,谨慎升级。

查看AndroidX版 1.x 分支 请戳此处

查看Android Support版 1.x 分支 请戳此处

查看 1.x API帮助文档

版本记录

v2.3.1:2023-3-4
  • 更新CameraX至v1.2.1
  • 更新Gradle至v7.5
  • 优化细节
v2.3.0:2022-12-11
  • 更新CameraX至v1.2.0
  • 更新zxing至v3.5.1
  • 更新compileSdkVersion至33
查看更多版本记录
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-03-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
常用协议对比及 RPC 协议新形态探索
协议是 RPC 的基础。数据在连接上以什么格式传输,服务端如何确定收到请求的大小,同一个连接上能不能同时存在多个请求,请求如果出错了应该怎么响应……这些都是需要协议解决的问题。
乐事
2021/06/25
1.6K0
你为什么使用RPC
微服务架构语境下,我们经常会聊到 RPC协议、RPC框架 等名词,但其实很多同学并没有真正理解这些术语的含义,只是一个模糊的概念。
windealli
2023/10/13
3280
你为什么使用RPC
RPC详解
RPC(Remote Procedure Call),即远程过程调用,是一个分布式系统间通信的必备技术,本文体系性地介绍了 RPC 包含的核心概念和技术,希望读者读完文章,一提到 RPC,脑中不是零碎的知识,而是具体的一个脑图般的体系。本文并不会深入到每一个主题剖析,只做提纲挈领的介绍。
sunsky
2020/08/20
2K0
编程思想:如何设计一个好的通信网络协议
当网络中两个进程需要通信时,我们往往会使用 Socket 来实现。Socket 都不陌生。当三次握手成功后,客户端与服务端就能通信,并且,彼此之间通信的数据包格式都是二进制,由 TCP/IP 协议负责传输。
用户1161731
2020/04/01
6K0
编程思想:如何设计一个好的通信网络协议
既然有HTTP协议,为什么还要有RPC
我想起了我刚工作的时候,第一次接触RPC协议,当时就很懵,我HTTP协议用的好好的,为什么还要用RPC协议?
小白debug
2022/12/02
8370
既然有HTTP协议,为什么还要有RPC
RPC-整体概念
  RPC(Remote Procedure Call),即远程过程调用,是一种通过网络从远程计算机程序上请求服务而不需要了解底层网络技术的协议,实现调用远程主机上的方法就像调用本地方法一样。RPC协议在分布式系统中发挥重要的作用。
在周末
2019/08/26
5600
gRPC简介: Google的高性能RPC框架
摘要: gRPC是Google开源的高性能RPC框架,起源于Google内部的RPC系统——Stubby。本文详细探讨了gRPC的核心设计思路、与ThriftRPC和传统RPC的区别,以及gRPC的主要优势。
猫头虎
2024/04/09
1.7K0
gRPC简介: Google的高性能RPC框架
终于有人把tcp、http、rpc和grpc总结完整了
随着微服务的迅速发展,各大互联网企业也投入到微服务的使用种。微服务最大的特点是,跨进程、跨服务、跨语言之间的调用,使得我们能够像调用本地类、函数一样。当微服务具备该特点,将我们复杂的业务拆分成不同的服务,服务之间在相互调用。这也是微服务为什么火的原因之一。
兔云小新LM
2023/04/27
11.2K0
终于有人把tcp、http、rpc和grpc总结完整了
06-gRPC收发请求过程解析
Google 开发并且开源的一款高性能、跨语言的 RPC 框架,当前支持 C、Java 和 Go。跨语言,通信协议基于HTTP/2,序列化支持 PB(Protocol Buffer)和 JSON。
JavaEdge
2023/02/26
8180
06-gRPC收发请求过程解析
国产巨轮——蚂蚁金服SOFA-RPC框架深度分析
蚂蚁金服近期开源了研发多年的SOFA一篮子框架,其中就有一个非常核心的RPC框架,它叫SOFA-BOLT。小编今天花了近一天的时间仔细阅读研究它的源码,阅读过程中遇到了不少问题,蚂蚁金服的相关技术人员都非常耐心的及时解答了我的疑难。这里将我从中学到的知识点一并分享给大家。
老钱
2018/08/14
1.1K0
鹅厂火热开发框架:trpc-go设计理念介绍
作者:ronaldoliu,腾讯 IEG 后台开发工程师 trpc-go 是目前公司运用广泛的一个开发框架,支持多协议扩展,能够一键集成各种公司现有平台的功能,非常方便。那么它到底是怎么做到的呢? trpc-go 是目前公司里非常火热的一个开发框架,集成了很多开箱即用的功能,非常方便。trpc-go 代码量不算太多,但是写得还是有点绕,直接阅读可能会比较晕。因此本文主要对 trpc-go 的模块设计进行一个分享,帮助大家构建一个整体视图,后续有需要再针对性的去阅读各模块源码即可。 做后端开发的同学肯定接触过
腾讯技术工程官方号
2023/01/11
4.7K6
鹅厂火热开发框架:trpc-go设计理念介绍
RPC简介
RPC(Remote Procedure Call):远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想。
Helloted
2022/06/08
4.9K0
RPC简介
高并发服务优化篇:详解RPC的一次调用过程
只要涉及到分布式服务,就绕不开RPC调用。RPC是什么,我认为大部分同学都能说出个一二三。
Coder的技术之路
2021/07/20
1.4K0
grpc-learn
RPC框架服装屏蔽底层传输方式(TCP/UDP),序列化方式(XML/Json/二进制)和通信细节,调用者可以像调用本地接口一样调用远程服务。核心是要解决在分布式系统间,如何执行另外一个地址空间上的函数。
radaren
2018/08/28
7870
性能基础之常见RPC框架浅析
在性能基础之浅谈常见接口性能压测一文中我们有简单介绍常见的 RPC 接口,本文将单篇详细介绍 RPC 框架。
高楼Zee
2019/07/17
1.7K0
性能基础之常见RPC框架浅析
到底什么是RPC - 概述
远古时期,每个进程各干各的,但随着发展有时候会存在A进程调用B进程某一方法,使用其功能的场景,比如说把画图统一都在某一个进程中,其他进程只需要调用它就ok了(代码没有散落到各地、也减少了一部分动态链接的管理),但是最初是不支持的,就产生了所谓的IPC(Inter-process communication 本地进程间通信),没错这里的IPC就是上学的时候经常背的 共享内存等进程间通讯方式。 再后来越来越多的单机系统复杂到无法维护面临拆分,小型机的瓶颈凸显及性价比越来越低,由pc和廉价服务器构成的集群、分布式方案逐渐形成,开始出现多个pc或者服务器 搭建分布式系统的场景,之前单机上的IPC也演变成了现在的RPC(远程过程调用)。 做服务器端研发,经常会有这样的一些名词RMI(remote method invocation,面向对象的远程方法调用)、RPC(remote procedure call,远程过程调用)、SOAP(simple object access protoal,简单对象访问协议)、REST(representational state transfer,表达性状态转移),这些都可以理解为调用远程方法的一些通信技术“风格”,其中RPC是一个泛化的概念,严格来说一切远程过程调用手段都属于rpc范畴,本系列要说的就是这个泛化的RPC。
邹志全
2020/04/23
3.5K0
【字节跳动】第十三讲 深入浅出RPC框架| 青训营笔记
江学武:目前就职于字节跳动基础架构服务框架团队,参与Kitex和ByteMesh的研发工作。
了凡银河系
2022/08/22
9210
【字节跳动】第十三讲 深入浅出RPC框架| 青训营笔记
day12 | 深入浅出RPC框架 | 第三届字节跳动青训营笔记
以上步骤只是为了说明原理。事实上编译器经常会做优化,对于参数和返回值少的情况会直接将其存放在寄存器,而不需要压栈弹栈的过程,甚至都不需要调用call,而直接做inline操作。
千羽
2023/01/14
9420
HTTP 与 RPC 接口区别
HTTP 与 RPC 接口是两种常见的接口通信协议。本文将会介绍它们的定义,区别和相同之处,应用场景以及目前的技术发展趋势,并给出接口代码示例和开发常用工具。
物立
2023/04/17
7450
HTTP 与 RPC  接口区别
TCP粘包、拆包与通信协议详解
在TCP编程中,我们使用协议(protocol)来解决粘包和拆包问题。本文将详解TCP粘包和半包产生的原因,以及如何通过协议来解决粘包、拆包问题。让你知其然,知其所以然。
田守枝
2019/05/21
11.5K0
TCP粘包、拆包与通信协议详解
相关推荐
常用协议对比及 RPC 协议新形态探索
更多 >
LV.0
腾讯前端开发
目录
  • ZXingLite
    • Gif 展示
    • ViewfinderView属性说明
    • 引入
      • Gradle:
      • 温馨提示
    • 使用说明
      • 快速实现扫码识别有以下几种方式:
      • 关于 CameraScan
      • 关于 CameraConfig
      • 关于 Analyzer
      • 关于 CaptureActivity 和 CaptureFragment
    • 使用示例
      • CameraScan配置示例
      • 布局示例
      • 代码示例
      • 其他
      • 相关推荐
    • 版本说明
      • v2.x 基于CameraX进行了重构
    • 版本记录
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档