gRPC性能测试(.net 5)

创建一个最简单的gRPC服务,服务器代码如下:

using Grpc.Core;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks; namespace GrpcService1
{
public class GreeterService : Greeter.GreeterBase
{
private readonly ILogger<GreeterService> _logger;
public GreeterService(ILogger<GreeterService> logger)
{
_logger = logger;
} public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)
{
return Task.FromResult(new HelloReply
{
Message = "Hello " + request.Name + DateTime.Now.ToString("HH:mm:ss")
});
}
}
}

创建一个c#控制台程序作为gRPC客户端,代码如下:

using System;
using System.Net.Http;
using System.Threading.Tasks;
using Grpc.Net.Client; namespace GrpcGreeterClient
{
class Program
{
static async Task Main(string[] args)
{
System.Threading.Thread.Sleep(3000); // The port number(5001) must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("http://localhost:5000"); var client = new Greeter.GreeterClient(channel); System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start(); for (int i = 0; i < 1000; i++)
{
var reply = await client.SayHelloAsync(
new HelloRequest { Name = "GreeterClient" });
//Console.WriteLine("Greeting: " + reply.Message);
}
sw.Stop();
Console.WriteLine("用时:" + sw.ElapsedMilliseconds + "ms");
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
}
}

同时启动这两个工程,最后客户端调用1000次服务器,用时:1405ms

注:服务器端已经关闭日志,开启日志的话,用时7000多ms

JMS性能测试(.net 5)

创建一个最简单的微服务,代码如下:

using System;
using System.Collections.Generic;
using System.Text; namespace JMS.MicroServiceHost2.Controllers
{
public class DemoController : BaseController
{
public string Hello(string name)
{
return "Hello " + name + DateTime.Now.ToString("HH:mm:ss");
}
}
}

创建一个c#控制台程序作为客户端,代码如下:

using System;
using System.Net.Http;
using System.Threading.Tasks;
using Grpc.Net.Client; namespace GrpcGreeterClient
{
class Program
{
static async Task Main(string[] args)
{
System.Threading.Thread.Sleep(3000); using (JMS.JMSClient jmsClient = new JMS.JMSClient("47.52.0.186", 8900))
{
var service = jmsClient.GetMicroService("DemoService");
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start(); for (int i = 0; i < 1000; i++)
{
var ret = service.Invoke<string>("Hello", "GreeterClient");
}
sw.Stop();
Console.WriteLine("用时:" + sw.ElapsedMilliseconds + "ms");
} Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
}
}

同时启动这两个工程,最后客户端调用1000次服务器,用时:154ms

JMS微服务远程调用性能测试 vs .Net Core gRPC服务的更多相关文章

  1. SpringBoot2.0 整合 Dubbo框架 ,实现RPC服务远程调用

    一.Dubbo框架简介 1.框架依赖 图例说明: 1)图中小方块 Protocol, Cluster, Proxy, Service, Container, Registry, Monitor 代表层 ...

  2. Spring Boot 2 整合 Dubbo 框架 ,实现 RPC 服务远程调用

    一.Dubbo框架简介 1.框架依赖   图例说明: 1)图中小方块 Protocol, Cluster, Proxy, Service, Container, Registry, Monitor 代 ...

  3. (八)整合 Dubbo框架 ,实现RPC服务远程调用

    整合 Dubbo框架 ,实现RPC服务远程调用 1.Dubbo框架简介 1.1 框架依赖 1.2 核心角色说明 2.SpringBoot整合Dubbo 2.1 核心依赖 2.2 项目结构说明 2.3 ...

  4. Dubbo远程调用之公司内部提供的服务

    公司内部提供的服务 一家对外提供服务的公司,例如百度,腾讯,阿里,京东,58 同城等,公司内部有多个事业群,事业部门,每个事业部门内部又有若干个子部门,子部门里面有多个不同的小组负责各自的业务.提供对 ...

  5. 7.4 服务远程暴露 - 创建Exporter与启动netty服务端

    为了安全:服务启动的ip全部使用10.10.10.10 远程服务的暴露总体步骤: 将ref封装为invoker 将invoker转换为exporter 启动netty 注册服务到zookeeper 订 ...

  6. tomcat+webservice实现简单的web服务远程调用接口

    1,准备工作:    ①需要使用到jaxws的一系列架包,网址:http://jax-ws.java.net,我下的是比较新的一个版本(下载好以后吧架包发在lib下),②webservice的一个工具 ...

  7. 阶段5 3.微服务项目【学成在线】_day09 课程预览 Eureka Feign_05-Feign远程调用-客户端负载均衡介绍

    2 Feign远程调用 在前后端分离架构中,服务层被拆分成了很多的微服务,服务与服务之间难免发生交互,比如:课程发布需要调用 CMS服务生成课程静态化页面,本节研究微服务远程调用所使用的技术. 下图是 ...

  8. 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)

    一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...

  9. JAVAEE——BOS物流项目08:配置代理对象远程调用crm服务、查看定区中包含的分区、查看定区关联的客户

    1 学习计划 1.定区关联客户 n 完善CRM服务中的客户查询方法 n 在BOS项目中配置代理对象远程调用crm服务 n 调整定区关联客户页面 n 实现定区关联客户 2.查看定区中包含的分区 n 页面 ...

  10. SpringCloud微服务服务间调用之OpenFeign介绍

    开发微服务,免不了需要服务间调用.Spring Cloud框架提供了RestTemplate和FeignClient两个方式完成服务间调用,本文简要介绍如何使用OpenFeign完成服务间调用. Op ...

随机推荐

  1. mybatis测试类的书写步骤

    mybatis测试类的书写步骤 private SqlSession session; @Test //* 1.根据UserMapper接口的Class对象获取Mapper接口类型的对象 //* 2. ...

  2. ElasticSearch之cat count API

    读取当前存储的记录的数量. 命令样例如下: curl -X GET "https://localhost:9200/_cat/count?v=true&pretty" -- ...

  3. SQL注入上传文件获取shell

    SQL注入写文件的三个必要条件 Web目录有读写权限: 当目标网站的Web目录具有读写权限时,攻击者可以通过注入恶意SQL语句将恶意文件写入服务器上的Web目录. 知道文件的绝对路径: 攻击者需要知道 ...

  4. Spring Boot入坑-3-Maven简介

    概述 Maven是一个自动化构建工具 能够将支持Maven项目的依赖包从远程仓库拉取到本地仓库,并进行依赖管理 项目中通过pom.xml来描述项目,对项目依赖进行管理与配置 给项目提供编译.打包.安装 ...

  5. flutter BLoC框架

    BLoC(Business Logic Component)是一种在Flutter中用于管理状态和处理业务逻辑的设计模式和架构模式. BLoC 的核心思想是将应用程序的状态.业务逻辑和UI分离开来,以 ...

  6. linux中nginx下载安装部署

    反向代理 动静结合 负载均衡 下载 wget https://nginx.org/download/nginx-1.24.0.tar.gz 官网下载稳定版 解压 tar -zxvf nginx-1.2 ...

  7. 想了解Webpack,看这篇就够了

    摘要:Webpack是一种前端资源构建工具,一个静态模块打包器. 1. 摘要 Webpack是一种前端资源构建工具,一个静态模块打包器.在Webpack看来,前端的所有资源文件(js/json/css ...

  8. 如何只用一个小时定制一个行业AI 模型?

    摘要:华为云通过ModelArts Pro提供更多的行业套件和工作流可以供用户直接使用,进一步降低AI行业落地难度,让传统企业客户无需掌握算法知识亦可实现自身业务与AI技术的融合. 去年,在华为开发者 ...

  9. 【论文笔记#1】SPGAN-DA:用于领域自适应遥感图像语义分割的语义保留生成对抗网络

    作者: Yansheng Li 发表年代: 2023 使用的方法: 无监督领域自适应(UDA).GAN.ClassMix.边界增强 来源: IEEE TGRS 方向: 语义分割 期刊层次: CCF B ...

  10. 通过 Homebrew 在 Mac OS X 上安装和配置 Redis

    通过使用 Homebrew,可以大大降低在 Mac OS X 上设置和配置开发环境的成本. 让我们安装 Redis. $ brew install redis 安装后,我们将看到一些有关配置注意事项的 ...