前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >gRPC rocks build your first gRPC service(part 2)

gRPC rocks build your first gRPC service(part 2)

作者头像
jimmyhzhao
发布于 2022-04-10 04:04:07
发布于 2022-04-10 04:04:07
25400
代码可运行
举报
文章被收录于专栏:SkemaloopSkemaloop
运行总次数:0
代码可运行

In the previous aritile, we have created the schema. In this article, I will introduce how to generate the stub and server code.

Publish Schema

After click the create schema, the protobuf has been pushed to the sandbox repo of my github.

github repo

The path follows the rules we have defined in the previous article. After the schema is published to the GitHub repo, the next step is to generate the stub and server code according to the schema.

Publish Stub

Click the Next Step button to generate the stub code.

generate stub

By default, skemakit supports java snd golang. You can review the code generated. The stub code can be used by both he client and server to serialize and deserialize the messages between server and clients.

golang and java stub

Generate Server Code

Next we can generate the server code boilerplate, which is a java or golang project that you will add your business logic into.

Then you can check your prototol list to download your server boilerplate code.

download server code

Let`s take java as an example.

Download the java server code and unzip to a folder. The code structure is like below.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
~/Downloads/ cd sample_package_grpc-java_draft 
 ~/Downloads/sample_package_grpc-java_draft/ ls
pom.xml               sample_package       sample_package-client
 ~/Downloads/sample_package_grpc-java_draft/ tree
.
├── pom.xml
├── sample_package
│   ├── pom.xml
│   ├── src
│   │   ├── main
│   │   │   ├── java
│   │   │   │   └── com
│   │   │   │       └── example
│   │   │   │           └── server
│   │   │   │               ├── SayHelloService.java
│   │   │   │               ├── SayHiService.java
│   │   │   │               └── ServiceApplication.java
│   │   │   └── resources
│   │   │       └── application.yaml
│   │   └── test
│   │       └── java
│   │           └── README.md
│   └── target
│       └── README.md
└── sample_package-client
  ├── pom.xml
  ├── src
  │   ├── main
  │   │   ├── java
  │   │   │   └── com
  │   │   │       └── example
  │   │   │           └── client
  │   │   │               ├── ClientApplication.java
  │   │   │               ├── controller
  │   │   │               │   └── ClientController.java
  │   │   │               └── service
  │   │   │                   ├── ClientService.java
  │   │   │                   └── impl
  │   │   │                       └── ClientServiceImpl.java
  │   │   └── resources
  │   │       └── application.yaml
  │   └── test
  │       └── java
  │           └── README.md
  └── target
      └── README.md
​
25 directories, 16 files
​
​

Let`s edit the SayHiService.java to respond a request. The service will echo the message I send through the request.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.example.server;import com.skemaloop.test.SayHiGrpc;
import com.skemaloop.test.SayHiOuterClass;
import io.grpc.stub.StreamObserver;
import net.devh.boot.grpc.server.service.GrpcService;
​
@GrpcService
public class SayHiService extends SayHiGrpc.SayHiImplBase {
   @Override
   // SayHello
   public void sayHello(SayHiOuterClass.HelloRequest request,
   StreamObserver<SayHiOuterClass.HelloReply> responseObserver) {
       // PbServiceOuterClass.HelloReply reply = PbServiceOuterClass.HelloReply.newBuilder().setMsg("Msg: Hello," + request.getMsg() + "\n").build();
       SayHiOuterClass.HelloReply reply =SayHiOuterClass.HelloReply.newBuilder().build();
       // add a business logic here
       responseObserver.onNext(reply);
       responseObserver.onCompleted();
  }}

Build your project by maven.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mvn package

Start your service.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
java -jar sample_package-0.0.1-SNAPSHOT.jar 
​
.   ____         _           __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
 ' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot ::               (v2.4.0)2022-04-02 12:48:24.162 INFO 80519 --- [           main] com.example.server.ServiceApplication   : Starting ServiceApplication using Java 11.0.12 on JIMMYHZHAO-MB3 with PID 80519 (/Users/huizhao/Downloads/sample_package_grpc-java_v1.0.1/sample_package/target/sample_package-0.0.1-SNAPSHOT.jar started by huizhao in /Users/huizhao/Downloads/sample_package_grpc-java_v1.0.1/sample_package/target)
2022-04-02 12:48:24.164 INFO 80519 --- [           main] com.example.server.ServiceApplication   : No active profile set, falling back to default profiles: default
2022-04-02 12:48:24.702 INFO 80519 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2022-04-02 12:48:24.708 INFO 80519 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2022-04-02 12:48:24.708 INFO 80519 --- [           main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.39]
2022-04-02 12:48:24.739 INFO 80519 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2022-04-02 12:48:24.739 INFO 80519 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 538 ms
2022-04-02 12:48:24.831 INFO 80519 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
2022-04-02 12:48:24.940 INFO 80519 --- [           main] g.s.a.GrpcServerFactoryAutoConfiguration : Detected grpc-netty-shaded: Creating ShadedNettyGrpcServerFactory
2022-04-02 12:48:25.018 INFO 80519 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2022-04-02 12:48:25.075 INFO 80519 --- [           main] n.d.b.g.s.s.AbstractGrpcServerFactory   : Registered gRPC service: sample_module.sample_package.SayHi, bean: sayHiService, class: com.example.server.SayHiService
2022-04-02 12:48:25.076 INFO 80519 --- [           main] n.d.b.g.s.s.AbstractGrpcServerFactory   : Registered gRPC service: grpc.health.v1.Health, bean: grpcHealthService, class: io.grpc.protobuf.services.HealthServiceImpl
2022-04-02 12:48:25.076 INFO 80519 --- [           main] n.d.b.g.s.s.AbstractGrpcServerFactory   : Registered gRPC service: grpc.reflection.v1alpha.ServerReflection, bean: protoReflectionService, class: io.grpc.protobuf.services.ProtoReflectionService
2022-04-02 12:48:25.159 INFO 80519 --- [           main] n.d.b.g.s.s.GrpcServerLifecycle         : gRPC Server started, listening on address: *, port: 9999
2022-04-02 12:48:25.166 INFO 80519 --- [           main] com.example.server.ServiceApplication   : Started ServiceApplication in 1.963 seconds (JVM running for 2.272)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-02,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
视频监控汇聚平台EasyCVR视频监控录像的3种方式介绍
视频监控综合管理平台EasyCVR可以实现海量资源的接入、汇聚、计算、存储、处理等,平台具备轻量化接入能力,可支持多协议方式接入,包括主流标准协议GB28181、RTSP/Onvif、RTMP等,以及厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。
TSINGSEE青犀视频
2023/07/25
1K0
RTSP协议视频安防综合管理平台EasyNVR与海康萤石云平台运行机制差异对比
由于安防需要的越来越多,我们所接触的需求项目团队也越来越多,不少用户都是自己经过了前期的对比之后再选择的EasyNVR或者其他的视频流媒体平台。那么对于行业不太了解的用户在选择上仍然会遇到困难,比如EasyNVR流媒体服务和海康萤石云、大华乐橙这类平台的区别也会是用户考虑的问题。
TSINGSEE青犀视频
2021/03/24
2.1K0
网页可以播放RTMP视频流?支持RTMP的网页播放器
随着4G/5G网络的发展,以及有限带宽越来越大,人们对视频直播的需求也越来越多。不仅普通的互联网直播发展很快,传统的安防监控也开始互联网化,走起了互联网直播的路。雪亮工程、明厨亮灶、手机看店、智慧幼儿园监控等等都是将传统的安防摄像头进行互联网直播,有些甚至做成了web无插件直播和微信直播。
EasyNVR
2020/05/04
7.1K0
关于网络视频流媒体直播/点播服务流程,你要知道的全在这里了!(新手必看)
网络视频直播存在已有很长一段时间,随着移动上下行带宽提升及资费的下调,视频直播被赋予了更多娱乐和社交的属性,人们享受随时随地进行直播和观看。一般来说,网络视频直播的流程可以分为如下几步: 采集 —>处理—>编码和封装—>推流到服务器—>服务器流分发—>播放器流播放。 下面我们逐步来看一下。
EasyNVR
2020/05/08
1.3K0
视频监控流媒体传输量大时如何选择监控交换机?
我们都知道,交换机是监控网络传输的核心设备。一般在使用流媒体服务器进行监控直播的时候,设备少、数据传输量较少的时候,则不需要使用交换机,但是当设备多,数据传输大的时候,就需要使用交换机。
EasyNVR
2020/04/22
1.3K0
视频监控流媒体传输量大时如何选择监控交换机?
EasyCVR平台中如何通过接口调用切换HIKSDK主子码流?
我们在往期的文章中分享过关于主子码流的技术文章,TSINGSEE青犀视频的平台也可支持双码流,以及主子码流的自由切换。关于主子码流,一般来说,主码流较大但清晰度高,占用的带宽也较高。子码流的清晰度与主码流相比,要稍低一些,但是占用带宽小。所以一般来说,主码流用于本地存储,能获得更清晰的存储录像,子码流则适用于在低带宽网络上传输,节省带宽。
TSINGSEE青犀视频
2022/04/28
4630
国标GB28181协议EasyGBS视频平台新增全局主子码流配置
EasyGBS是基于国标GB28181协议的视频云服务平台,它可以支持国标协议的设备接入,实现视频的转码与分发,能够为大数据平台的搭建提供视频能力支持。在安防监控场景中,EasyGBS还拥有视频直播、录像存储、检索与回放、云台控制、告警上报、语音对讲、平台级联等功能,在很多实际项目中都已落地应用,如明厨亮灶、平安乡村、雪亮工程等。
TSINGSEE青犀视频
2022/03/09
5950
EasyNVR使用过程中问题的自我排查-----设备不在线问题自我排查检测
由于EasyNVR的受众越来越多,时长会遇到很对类似的问题咨询,之前虽然有写过很多的博文进行技术的或者使用问题的解答,随着客户询问的增多,我发现,要想然客户了解问题和解决问题,往往引导和给一个思路比直接给与支持和回答更有效果。因此在后续的博文中我将不间断的更新Easy系列相关问题的自我排查和解决思路和方法。帮助大家解决问题的同时更加了解软件。
EasyNVR
2020/04/23
5590
EasyNVR使用过程中问题的自我排查-----设备不在线问题自我排查检测
几百路大中型监控系统该如何选择交换机,这些干货告诉你!
现在的大型监控系统如何选择交换机才能让系统更有效稳定的运行,不至于出系统新的或者数据类的问题,特别是关于关于核心交换机的选择,现在我们来深入浅出的详细的讲解下:
网络工程师笔记
2021/05/17
2.3K0
几百路大中型监控系统该如何选择交换机,这些干货告诉你!
TSINGSEE视频能力在交通运输可视化管理平台项目中的应用
为贯彻落实交通强国试点工作要求,提升交通建设工程信息化管理水平,进一步强化交通建设工程管理,各地政府部门决定在全省高速公路、国省道、大型水运、地方铁路、机场工程安装视频监控系统,在建交通建设项目尚未安装视频监控系统的应当立即组织安装;已安装视频监控系统但不符合要求的,应当立即按要求完成改造。
TSINGSEE青犀视频
2023/04/21
3230
5G边缘计算赋能安防互联网直播行业,青犀视频强力打造云、边、端一体化协同音视频解决方案
视频项目各种各样,视频方案也是千变万化,可以有多种形式的组合来解决问题,最终选择具体哪一种方案可能会根据成本、效果、可行性等多个方面来综合,那么,有没有一套公式可以解决视频项目的需求?
EasyNVR
2020/07/20
1.5K0
5G边缘计算赋能安防互联网直播行业,青犀视频强力打造云、边、端一体化协同音视频解决方案
校园安防之高清IP摄像头全终端插件直播视频流媒体服务EasyNVR校园监控系统方案
校园安全逐渐成为社会关注热点,校园监控是目前保证校园安全与学生安全及事后查证的科技手段。如何有效维护校园秩序和安全,保证学校教学、科研工作的顺利进行,以及为同学们的生活和学习营造更好的安全环境,已成为社会关心的大事,所以校园监控就成为了当下的工作重点。
EasyNVR
2020/04/23
1.2K0
校园安防之高清IP摄像头全终端插件直播视频流媒体服务EasyNVR校园监控系统方案
如何利用AI算法+EasyCVR视频监控技术打造鱼塘养殖监管方案
对鱼塘养殖行业来说,养殖区域面积大、管理难,经常会遇到偷钓者、盗窃鱼苗、非法入侵等监管难题。传统的人工监管模式不仅耗费人力成本,而且监管效率低下,无法满足当前养殖户的需求。因此,搭建智能化的远程视频监控系统,满足养殖户对鱼塘的高效监管需求,已经势在必行。
TSINGSEE青犀视频
2023/09/28
3140
同一路摄像头视频流接入RTSP_Onvif网页无插件直播流媒体服务器EasyNVR与其他平台播放视频有差异的原因分析
随着平安城市、智慧城市、雪亮工程、智能交通等各项建设的持续开展,安防逐渐得到普及,面对如此广阔的市场,对安防企业来说不仅仅是机遇更多的是挑战。为了解决这些问题,近年来,视频监控行业发展方向主要为:“高清化、网络化、智能化”。视频监控设备技术性极强,系统的创新升级同时也在引导市场需求的变化并创造了新的市场需求。
EasyNVR
2020/04/23
7660
同一路摄像头视频流接入RTSP_Onvif网页无插件直播流媒体服务器EasyNVR与其他平台播放视频有差异的原因分析
浅析视频监控技术及AI发展趋势下的智能化视频技术应用
视频监控技术是指通过摄像机对指定区域进行实时视频直播、录制、传输、存储、管理和分析的技术系统。它可以用于监控各种场所,如校园、工厂、工地、工作场所、公共区域、交通工具等。视频监控技术主要涉及到以下几个部分:
TSINGSEE青犀视频
2023/06/15
5400
IP摄像头RTSP协议客户端EasyNVR视频平台如何调用主码流和子码流?
现在市面上的摄像头大部分都支持多码流,多码流也就是主码流和子码流,我们写过主码流和子码流的概念,感兴趣的小伙伴可以看一下,在这篇文章当中,我们讲了TSINGSEE青犀视频全线产品都是支持主码流和子码流调用的。
EasyNVR
2020/09/11
1.7K0
IP摄像头RTSP协议客户端EasyNVR视频平台如何调用主码流和子码流?
H264、H265安防摄像头WEB无插件直播EasyNVR之视频观感体验的优化配置
随着互联网基础设施建设的发展,4G/5G/NB-IoT各种网络技术的大规模商用,视频随时随地可看、可控的诉求越来越多,互联网思维、架构和技术引入进传统监控行业里,成为新形势下全终端监控的基础需求。
EasyNVR
2020/04/23
7010
H264、H265安防摄像头WEB无插件直播EasyNVR之视频观感体验的优化配置
车辆实时监控项目中数字摄像头和模拟摄像头的运用、区别及优势分析
上期为大家介绍过一个项目方案,车辆实时监控项目中需要车载摄像头推流到流媒体服务器直播/点播平台进行流转码分发。今天为大家解决的困惑是关于车载摄像头,一般我们接触的摄像头以数字摄像头为主,可车载摄像头基于其实际应用场景,可能不一定是数字摄像头,而是模拟摄像头。那模拟摄像头跟数字摄像头接入方式是否一样?两者之前的区别是什么?谁的优势更明显?今天就为大家统一解释下。
EasyNVR
2020/05/20
1.4K0
一文说透RTMP、RTSP、RTP、HLS、MPEG-DASH
常与RTSP一起用于音视频流传输,确保媒体数据能够准确、高效地传输到目标终端并进行解码播放。
音视频牛哥
2024/09/24
6.5K0
一文说透RTMP、RTSP、RTP、HLS、MPEG-DASH
网络摄像机(IPC)介绍
网络摄像机是一种结合传统摄像机与网络技术所产生的新一代摄像机,它可以将视频影像通过网络传至地球另一端,且远端的浏览者不需用任何专业软件,只要标准的网络浏览器(如“Microsoft IE或Netscape)即可监视其视频影像。网络摄像机一般由镜头、图像传感器、声音传感器、信号处理器、A/D转换器、编码芯片、主控芯片、网络及控制接口等部分组成。
用户6280468
2023/09/21
2.4K0
网络摄像机(IPC)介绍
推荐阅读
视频监控汇聚平台EasyCVR视频监控录像的3种方式介绍
1K0
RTSP协议视频安防综合管理平台EasyNVR与海康萤石云平台运行机制差异对比
2.1K0
网页可以播放RTMP视频流?支持RTMP的网页播放器
7.1K0
关于网络视频流媒体直播/点播服务流程,你要知道的全在这里了!(新手必看)
1.3K0
视频监控流媒体传输量大时如何选择监控交换机?
1.3K0
EasyCVR平台中如何通过接口调用切换HIKSDK主子码流?
4630
国标GB28181协议EasyGBS视频平台新增全局主子码流配置
5950
EasyNVR使用过程中问题的自我排查-----设备不在线问题自我排查检测
5590
几百路大中型监控系统该如何选择交换机,这些干货告诉你!
2.3K0
TSINGSEE视频能力在交通运输可视化管理平台项目中的应用
3230
5G边缘计算赋能安防互联网直播行业,青犀视频强力打造云、边、端一体化协同音视频解决方案
1.5K0
校园安防之高清IP摄像头全终端插件直播视频流媒体服务EasyNVR校园监控系统方案
1.2K0
如何利用AI算法+EasyCVR视频监控技术打造鱼塘养殖监管方案
3140
同一路摄像头视频流接入RTSP_Onvif网页无插件直播流媒体服务器EasyNVR与其他平台播放视频有差异的原因分析
7660
浅析视频监控技术及AI发展趋势下的智能化视频技术应用
5400
IP摄像头RTSP协议客户端EasyNVR视频平台如何调用主码流和子码流?
1.7K0
H264、H265安防摄像头WEB无插件直播EasyNVR之视频观感体验的优化配置
7010
车辆实时监控项目中数字摄像头和模拟摄像头的运用、区别及优势分析
1.4K0
一文说透RTMP、RTSP、RTP、HLS、MPEG-DASH
6.5K0
网络摄像机(IPC)介绍
2.4K0
相关推荐
视频监控汇聚平台EasyCVR视频监控录像的3种方式介绍
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验