移动设备上跨平台通用远程调用框架的实现

Maid: 跨平台AI助手应用的开源革命 Maid项目代表了移动AI应用的一次重要尝试。通过将强大的AI模型带到用户的掌中设备,Maid正在改变人们与AI交互的方式。作为一个开源项目,Maid不仅为用户提供了便利,也为整个AI社区贡献了宝贵的经验和代码。随着项目的不断发展和完善,我们有理由相信Maid将在未来的AI应用领域发挥更大的作用。无论你是AI技术的爱好者,还是寻找便捷AI助手的普通用户,Maid都值得一试。让我们共同期待Maid项目的未来发展,见证移动AI应用的无限可能。 阅读详情

目前小组正在做的项目是Symbian平台上的手机电视客户端,是一个基于3G网络的富媒体应用,所以与远端服务器间的数据交换将不可避免。

                   

实现一个调用远程服务的模块以保证通信的高效和畅通是我们当前采取的方案,不过接口的需求略有不同:

l         由于运行在移动终端,受存储空间和处理速度的限制,框架必须精简

l         另有WM、Brew、iPhone等平台,所以生成的接口必须能够跨平台,以减少工作量

                   

目前采用的方案:

该方案的一个升级版本是定义一个XML Schema,该Schema描述的接口如FuncName(param1,param2,param3……)来作为第二类接口,这样任何业务相关的控制状态信息都可以通过该接口通信,客户端与服务器端之间只维护一份XML Schema,该通信方式也可描述成函数Post(XML DATA),具有很不错的特性:

a)        接口稳定,结构简洁清晰

b)       任何业务数据都能通过,当然任何数据都可以通过

c)       XML处理实现上可以更灵活,有效减少连接数和通信量

d)       可以实现自定义通信协议,具有远程过程调用接口梦寐以求的特性

但缺点也是大大的:

a)       XML数据的解析将变得异常繁琐,需要无比辛苦地把XML消息映射成具体平台相关的数据结构,而且还不能保证在各平台通用。

b)      由于数据完全依赖XML的解析,服务端对应答包结构的微小修改,也可能会给客户端XML结构数据的解析带来麻烦,部署和维护将会变得很痛苦。

                   

于是,构想中的另外一种方案:

比起HTTP+XML的通信方式多了一个基于XML通用远程调用层,这层的实现可以使用SOAP类库。客户端与服务器端之间只保存一个WSDL文件,在用户数据发生变化的时候,该接口不用发生变化。这种架构具有HTTP+XML方案的特性,又可以解决许多缺陷。

                   

注:由于WSDL和具体语言的具体操作接口绑死,导致修改WSDL需要重新使用工具导出具体语言的接口。这个是SOAP实现的远程过程调用本身带来的问题,但这些都可以使用自动工具来完成,实际人工工作量并不是很大。

                   

不过,这样也引入了SOAP在不同平台下的互操作性问题,为了最大限度的避免互操作性问题,则必须遵守WebService Base Profile 1.x系列标准。引入SOAP也增加了性能消耗和处理复杂度,所以一个简洁的SOAP实现将是必须的。

 

基于Sane与OpenWrt构建跨平台无线扫描服务器:打通iOS/Android移动端扫描壁垒 本文详细介绍了如何利用Sane与OpenWrt构建跨平台无线扫描服务器,解决iOS/Android移动端扫描难题。通过零成本改造老旧扫描仪,实现全平台兼容的无线扫描方案,提升家庭和小型办公室的文档处理效率。重点解析了Sane驱动框架、OpenWrt路由器配置及移动端适配技巧,为技术爱好者提供实用指南。 阅读详情

相关推荐

SC8F073单片机串口通信保姆级教程:从寄存器配置到完整收发Demo(附避坑指南)

本文详细解析了SC8F073单片机串口通信的寄存器配置与调试技巧,涵盖TXSTA、RCSTA和SPBRG寄存器的逐位设置,提供精确的波特率计算方法和工业级抗干扰策略。通过完整的收发Demo和避坑指南,帮助开发者快速掌握底层串口通信技术,适用于工业控制等严苛环境。

weixin_33724046的博客 485

(三)四种流行的RPC框架(Dubbo/Motan/Thrift/Grpc)

目录 ●Dubbo ●Motan ● Thrift ● Grpc 上述四种流行RPC框架的对比 ●Dubbo 本来阿里2014年就不在维护Dubbo了,直到2017年9月份又恢复了维护,可能一来是用户量很多,哪怕是在不维护的情况下还是有很多的用户,二来是微服务比较火,比较看好微服务的方向。以下是Dubbo的架构模型(实线表示同步调用,虚线表示异步调用): ...

zl_StepByStep的博客 1万+

Anaconda+清华源加速PyTorch GPU环境安装与CUDA版本匹配指南

深度学习环境管理常面临依赖冲突与下载缓慢问题,通过虚拟环境隔离与镜像源加速可显著提升效率。Anaconda利用conda机制创建独立Python环境,避免包版本冲突;清华源通过国内镜像同步大幅提高下载速度。GPU版PyTorch安装需严格匹配CUDA、cuDNN与显卡驱动版本,否则易出现CUDA不可用错误。该方案适用于图像分割、目标检测等需多版本PyTorch并存的场景,能快速搭建稳定GPU训练环境。本文详解Anaconda安装、清华源配置及PyTorch GPU版安装全流程。

weixin_30522983的博客 236

grpc框架

rpc框架的原理: rpc框架分为3类: 支持多语言的PRC框架,比较成熟的有 Google 的 gRPC、Apache(Facebook)的 Thrift; 支持特定语言的 RPC 框架,如新浪微博的 Motan; 支持服务治理等服务化特性的分布式服务框架,其底层内核仍然是RPC框架, 例如阿里的 Dubbo。 grpc gRPC 是一个高性能、开源和通用的 RPC 框架,面向服务端和移动端,基于 HTTP/2 设计。gRPC是谷歌推出的一个开源RPC框架。 过程如下: 建立连接: 使用http/2协议

sfakh的博客 2264

金融风控实战:用Python从零搭建贷款违约预测模型(附完整数据集)

本文详细介绍了如何使用Python从零构建金融风控中的贷款违约预测模型,涵盖数据清洗、特征工程、模型构建与评估等全流程。通过实战案例展示逻辑回归、XGBoost和LightGBM三大算法的对比,特别强调AUC-ROC指标在金融风控中的重要性,并附完整数据集和代码实现。

weixin_29175469的博客 238

(2024,DDPM,DDIM,流匹配,SDE,ODE)扩散:基础教程

本文的目标是尽可能简单地教授扩散。第一节介绍扩散的基本原理。第二节和第三节展示如何构建随机和确定性扩散采样器。第四部分介绍了密切相关的流匹配,可看作是扩散的推广。​第五节,强调实践中最重要的一些设计选择,包括采样器、噪声时间表和参数化方法。

qq_44681809的博客 1万+

基于Android智能终端的远程控制系统

摘  要: 提出了基于Android 手机的远程控制系统设计方案,该系统基于Openmobster开源手机云计算平台。介绍了整个系统结构框架,详细分析了各个模块的具体实现。通过应用实例在设备上进行了测试,实现了云服务器端对Android智能手机终端的访问和远程控制。 关键词: 云计算; Openmobster; Android; 远程控制     随着 摘  要: 提出了基于Androi

coding 9862

从‘静态拍照’到‘动态录像’:用Malmquist指数讲好你的效率变化故事(附Stata/R代码)

本文深入探讨了如何利用Malmquist指数构建动态效率分析框架,从静态数据到动态叙事的转变。通过分解技术效率变化(EC)和技术进步(TC),结合Stata/R代码实现四种动态可视化方法,帮助研究者更直观地展示效率变化的动态特征。文章还提供了诊断性叙事结构和比较叙事技巧,助力决策者理解效率提升的来源与趋势。

weixin_32678995的博客 603

无线客户端应该如何选择rpc服务

对于移动端来说,流量非常重要,

王启军 1099

UE5热更新(通过Pak包加载关卡资源,并添加到流关卡)

请先阅读我上一篇文章)**

xialuhui的博客 6456

Vue3 - Element Plus上传组件el-upload上传多个文件时,让on-change监听事件仅执行一次并获取最终文件列表方法(开启多选文件并手动上传,拿到文件列表统一循环调用接口上传)

vue3,elementplus,Upload上传,el-upload,文件上传组件,上传组件on-change里执行多次,取消自动上传后change重复执行问题,upload上传多个文件后导致on-change执行多次拿不到最终文件列表,Element-plus的upload组件on-change不断执行怎么办,上传多个文件多次执行调用,上传多个文件时如何只执行一次on-change方法拿到最终的文件列表,vue3elementplus上传组件开启多个上传后导致change方法执行好几次,仅调用一

🏆 前端领域优质创作者 1万+

如何在移动设备上部署高效AI模型?5个步骤解锁轻量级AI框架潜力

想要在手机上运行强大的AI模型吗?Maid是一个跨平台的Flutter应用,专为在移动设备上部署AI模型而设计。它支持GGUF/llama.cpp模型的本地运行,以及Ollama和OpenAI模型的远程调用。本文将为您详细介绍如何通过5个简单步骤,在移动设备上轻松部署高效AI模型。 ## 🚀 第一步:下载并安装Maid应用 Maid应用采用Flutter框架开发,支持Android、iOS、

gitblog_00502的博客 514

无线传感网络的Matlab实现

Matlab是一种功能强大的数值计算和数据分析工具,也可以用于无线传感网络的建模和仿真。根据实际需求,可以进一步扩展和优化模型,例如考虑节点能量消耗、网络路由、数据融合等方面的问题。函数用于绘制节点之间的连接关系,其中第一个参数是邻接矩阵,描述了节点之间的连接关系。这里使用了一个4个节点的简单例子,可以根据实际需求修改节点数量和连接关系。可以使用Matlab中的图形绘制函数来可视化节点的位置和连接关系。在无线传感网络中,节点的能量是一个关键因素。通过计算节点的剩余能量,可以评估节点的能量消耗情况。

2301_79331387的博客 249

集大成者的下一代编程语言?探秘 Object Sense 如何实现分布式、跨平台与多语言无缝集成

Object Sense 以其“最小化核心,最大化扩展”的设计理念,通过创新的 Micro 框架,成功挑战了传统编程语言的臃肿困境。它在分布式、跨平台和多语言集成方面的颠覆性,使其成为名副其实的“集大成者”。

yescodigger的博客 666

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

基于CentOS 搭建gRPC框架

1. 简介 RPC(remote procedure call 远程过程调用)框架实际是提供了一套机制,使得应用程序之间可以进行通信,而且也遵从server/client模型。使用的时候客户端调用server端提供的接口就像是调用本地的函数一样。 gRPC(google RPC)是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。目前提供 C、Java 和 Go 语言版本...

Yummy 941

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

终极企业级开发利器:mORMot2框架深度解析与实战指南

mORMot2是一个专为Delphi和FreePascal设计的开源RESTful ORM/SOA/MVC框架,在现代企业级应用开发中展现出卓越的性能和灵活性。这个完整的客户端-服务器工具箱为开发者提供了从数据访问到服务发布的全面解决方案。 ## 框架架构全景解析 [![mORMot2架构图](https://raw.gitcode.com/gh_mirrors/mo/mORMot2/raw/

gitblog_00023的博客 1221

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

探索 gRPC:一个高效、现代的 RPC 框架

是由 Google 开源的一个高性能、开源和通用的 Remote Procedure Call (RPC) 框架,基于 Protocol Buffers(protobuf)进行序列化和接口定义。它的目标是帮助开发者构建微服务,实现跨平台的通信,并为分布式系统提供强健的解决方案。 ## 技术分析 ### Protocol Buffers gRPC 基于 Protocol Buffers(简称 ...

gitblog_00038的博客 336

微软开源跨平台移动开发实践(文摘)

第1章 微软“云+端”战略 云计算的特点: 1.超大规模1PB=1024TB 2.良好弹性 3.快速部署,持续集成   isss,基础设施即服务   存储和网络,虚拟机 paas,平台即服务  中间件服务 saas,软件即服务  整体应用解决方案   端的变革: 特点 1.设备交互呈现智能化趋势 2.设备与云紧密连接 3.设备的规格多种多样 4.应用的开发语言越来越高...

weixin_33781606的博客 180

gRPC 一种现代、开源、高性能的远程过程调用 (RPC) 可以在任何地方运行的框架

例如,服务器可以等到它收到所有 客户端的消息在写入其消息之前,或者服务器和客户端可以播放 “乒乓球” – 服务器收到请求,然后发回响应,然后 客户端根据响应发送另一个请求,依此类推。这两个流独立运行,因此客户端 服务器可以按照他们喜欢的任何顺序读取和写入:例如, 服务器可以等待接收所有客户端消息,然后再写入其 响应,或者它可以交替阅读消息然后编写消息,或者 读取和写入的其他一些组合。在双向流式处理 RPC 中,调用由客户端发起 调用方法和接收客户端元数据的服务器,方法名称, 和截止日期。

通往IT大道的专栏 833

GRPC学习笔记

一、什么是gRPC?作用是什么?优点在哪里?定义:(Google Remote Procedure Protocol)谷歌远程过程调用,根据官方文档对grpc的介绍,grpc可以让客户端程序直接调用服务端不同主机上应用的方法,就像调用本地方法一样,方便我们创建分布式应用和服务在gRPC里客户端应用可以像调用本地对象一样直接调用另一台不同的机器上服务端应用的方法,使得您能够更容易地创建分布式应用和服务

小球why的博客 2343

grpc python 负载均衡_grpc应用于微服务的分析,基于python

grpc应用于微服务的分析gRPC 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计,目前提供 C、Java 和 Go 语言版本,分别是:grpc, grpc-java, grpc-go. 其中 C 版本支持 C, C++, Node.js, Python, Ruby, Objective-C, PHP 和 C# 支持.gRPC 基于 HTTP/2 标准设计,带来诸如双向流...

weixin_39929566的博客 381

打破设备壁垒:让你的电脑成为跨平台游戏中心

你是否曾想过,为什么高性能电脑只能固定在书桌一角?为什么游戏体验会被硬件设备所限制?在这个多设备共存的时代,我们却依然被"一台电脑对应一个使用场景"的思维所束缚。Sunshine的出现,正是为了解决这一数字生活痛点——它不是简单的游戏串流工具,而是一套完整的跨设备协同解决方案,让你的计算资源突破物理空间限制,实现真正意义上的设备无关性。 ## 场景痛点:为什么传统游戏体验正在失效? ### 设

gitblog_00020的博客 226

python 微服务 etcd_grpc应用于微服务的分析,基于python

编辑推荐:本文来自于csdn,介绍了一个高性能、开源和通用的RPC 框架gRPC,其中对服务发现和负载平衡进行了详细的阐述,希望对大家的学习能有所帮助。gRPC 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2设计,目前提供 C、Java 和 Go 语言版本,分别是:grpc, grpc-java, grpc-go.其中 C 版本支持 C, C++, Node.js, Pytho...

weixin_39743695的博客 304

grpc框架分析之sprinboot整合grpc

gRPC简介: gRPC 一开始由 google 开发,是一款语言中立、平台中立、开源的远程过程调用(RPC)系统。面向移动和 HTTP/2 设计。目前提供 C、Java 和 Go 语言版本,分别是:grpc, grpc-java, grpc-go. 其中 C 版本支持 C, C++, Node.js, Python, Ruby, Objective-C, PHP 和 C# 支持。 ...

qq_38697245的博客 3878
下一篇: 移动平台WebService通信的瑞士军刀:gSOAP
Shepherdog
博客等级 码龄20年 5粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值