gRPC源码剖析-Server启动流程

这篇具有很好参考价值的文章主要介绍了gRPC源码剖析-Server启动流程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

创建一个gRPC Server代码很简单就这么两行,我们可以运行起来单步调试来学习一下gRPC Server启动流程。

Server server = ServerBuilder.forPort(50051)

               .addService(new OrderServiceImpl())

               .build()

               .start();

server.awaitTermination();

一、 .forPort 

绑定端口

gRPC源码剖析-Server启动流程,Java技术,服务器,数据库,运维

调用NettyServerBuilder构建InetSocketAddress对象,ServerProvider采用JDK SPI机制去加载Netty通讯模块。

SPI 全称Service Provider Interface是一种服务发现机制,它通过在ClassPath路径下提供的META-INF/services目录里查找文件,然后自动加载文件所定义的类,SPI的应用还是比较广泛的,比如加载JDBC驱动,另外业务层架构也有使用SPI机制的,比如淘宝早期交易中心系统,各业务方提供自己的交易扩展类,这样不会影响主交易流程。

二、.addService 

 绑定服务

gRPC源码剖析-Server启动流程,Java技术,服务器,数据库,运维

通过调用InternalHandlerRegistry的addService将OrderServiceImpl对象入加入内部一个HashMap里,key为类名全名,value是服务定义。

addMethod为方法绑定处理器(proto编译生成的OrderServiceGrpc对应的方法),这里会根据proto定义的方法类型调用对应的通信模式,asyncUnaryCall(一元RPC模式)、

asyncServerStreamingCall(服务器端流RPC模式)、asyncClientStreamingCall(客户端流RPC模式)、双向流模式。

三、.build 

构建Server实例

gRPC源码剖析-Server启动流程,Java技术,服务器,数据库,运维

通过buildTransportServer()构建NettyServer服务器,然后传入ServerImpl构建gRPC服务器。

注:低版本好像是会为每一个监听地址构建一个NettyServr,但grpc-netty1.7.1版本源代码只构建了一个NettyServer。待确认?

四、.start()  

启动gRPC NettyServer 开始HTTP2监听。 

gRPC源码剖析-Server启动流程,Java技术,服务器,数据库,运维

五、.awaitTermination()

synchronized (lock) {      while (!terminated) {        lock.wait();      }}

轮询关闭状态,如果没有关闭则使锁等待保持Server线程运行。文章来源地址https://www.toymoban.com/news/detail-727345.html

到了这里,关于gRPC源码剖析-Server启动流程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【spring源码系列-02】通过refresh方法剖析IOC的整体流程

    Spring源码系列整体栏目 内容 链接地址 【一】spring源码整体概述 https://blog.csdn.net/zhenghuishengq/article/details/130940885 【二】通过refresh方法剖析IOC的整体流程 https://blog.csdn.net/zhenghuishengq/article/details/131003428 【三】xml配置文件启动spring时refresh的前置工作 https://blog.csdn.net/zhenghuishen

    2024年02月08日
    浏览(33)
  • 【网络编程】高性能并发服务器源码剖析

      hello !大家好呀! 欢迎大家来到我的网络编程系列之洪水网络攻击,在这篇文章中, 你将会学习到在网络编程中如何搭建一个高性能的并发服务器,并且我会给出源码进行剖析,以及手绘UML图来帮助大家来理解,希望能让大家更能了解网络编程技术!!! 希望这篇文章能

    2024年04月15日
    浏览(41)
  • Spring源码核心剖析 | 京东云技术团队

    SpringAOP作为Spring最核心的能力之一,其重要性不言而喻。然后需要知道的是AOP并不只是Spring特有的功能,而是一种思想,一种通用的功能。而SpringAOP只是在AOP的基础上将能力集成到SpringIOC中,使其作为bean的一种,从而我们能够很方便的进行使用。 1.1 使用场景 当我们在日常业

    2024年02月10日
    浏览(29)
  • 从源码层面深度剖析Spring循环依赖 | 京东云技术团队

    以下举例皆针对单例模式讨论 图解参考 https://www.processon.com/view/link/60e3b0ae0e3e74200e2478ce 对于单例Bean来说,在Spring容器整个生命周期内,有且只有一个对象。 Spring 在创建 Bean 过程中,使用到了三级缓存,即 DefaultSingletonBeanRegistry.java 中定义的: 以 com.gyh.general 包下的 OneBean 为

    2024年02月13日
    浏览(24)
  • 【linux高性能服务器编程】项目实战——仿QQ聊天程序源码剖析

    hello !大家好呀! 欢迎大家来到我的Linux高性能服务器编程系列之项目实战——仿QQ聊天程序源码剖析,在这篇文章中, 你将会学习到如何利用Linux网络编程技术来实现一个简单的聊天程序,并且我会给出源码进行剖析,以及手绘UML图来帮助大家来理解,希望能让大家更能了

    2024年04月28日
    浏览(32)
  • Jenkins配置远程服务器SSH Server流程

    说明:以阿里云轻量应用服务器,本文介绍如何在Jenkins中配置远程服务器,Jenkins安装参考这篇文章; 首先,启动Jenkins容器,进入Jenkins管理后台,点击 系统配置 ; 进入系统设置后,滚动到最底下,找到 Publish over SSH 配置,填上SSH Server的信息:设置一个服务名称,IP地址,

    2024年02月07日
    浏览(35)
  • http-server使用,启动本地服务器 & 使用serve包本地启动

    http-server使用,启动本地服务器 使用serve包本地启动 直接打开html文件,跨域不渲染图片 1、简介 官网:https://github.com/http-party/http-server http-server是一个简单的零配置命令行 http服务器 。 它足够强大,足以用于生产用途,但它既简单又易于破解,可用于测试,本地开发和学习。

    2024年02月02日
    浏览(46)
  • SQL Server的链接服务器创建全详细流程

    创建SQL Server链接服务器的详细流程如下: 打开 SQL Server Management Studio (SSMS),连接到你想要创建链接服务器的目标实例。 在对象资源管理器中,展开 \\\"服务器对象\\\" 节点,右键点击 \\\"链接服务器\\\",然后选择 \\\"新建链接服务器\\\"。 在 \\\"常规\\\" 选项卡中,输入链接服务器的名称并选择

    2024年02月11日
    浏览(24)
  • windows Server【开机启动和任务计划程序】实现服务器重启后项目自启动

    有些时候我们希望计算机开机后就启动一些服务或应用程序。 使用 Win+R 调出运行,输入: 1️⃣ shell:startup 用户开机自启动(程序开机自启动只针对当前登录的用户) 打开的目录为 C:UsersAdministratorAppDataRoamingMicrosoftWindowsStart MenuProgramsStartup 2️⃣ shell:common startup 系统开

    2024年02月08日
    浏览(47)
  • springboot启动流程源码解析(带流程图)

    本文自己写的(头条也有这篇文章),若有问题,请指正。 大致流程如下: 1. 初始化SpringApplication,从META-INF下的spring.factories读取 ApplicationListener/ApplicationContextInitializer 2.运行SpringApplication的run方法 3.读取项目中环境变量、jvm配置信息、配置文件信息等 4.创建Spring容器对象(

    2024年02月08日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包