首页 > 系统相关 >使用MessagePipe实现进程间通信

使用MessagePipe实现进程间通信

时间:2024-09-29 10:49:02浏览次数:9  
标签:InstanceLifetime MessagePipe 项目 间通信 services 进程 options

使用MessagePipe实现进程间通信

 

1、MessagePipe介绍

可以用于.NETUnity上面的高性能的内存/分布式消息传递管道。适用于发布/订阅模式、CQRS的中介模式、Prism中的EventAggregator、IPC(进程间通信)-RPC等。

支持:

  • 依赖注入
  • 过滤器管道
  • 更好的事件
  • 同步/异步
  • 带键值的/无键值的
  • 单例/Scoped
  • 广播/响应(+更多)
  • 内存/进程间/分布式

MessagePipe 比标准的 C# event更快,是Prism的EventAggregator的78倍。下面是官方给出的测试截图

每次使用publish分配的内存更少

还提供了Roslyn分析器以防止订阅泄露。

本库采用MIT协议

2、MessagePipe分布式发布/订阅的使用(进程间通信)

2.1 新建两个Wpf项目

项目名称分别为:MessagePipePublishAppMessagePipeSubscribeApp,Publish项目用于发布消息,Subscribe项目用于接收消息。项目采用Prism框架进行搭建。通过重载的CreateContainerExtension方法中进行依赖注入。
两个项目对MessagePipe功能注入代码如下:
Publish项目代码:

var services = new ServiceCollection();
services
    .AddMessagePipe()
    .AddUdpInterprocess(
        "127.0.0.1",
        3215,
        options =>
        {
            options.InstanceLifetime = InstanceLifetime.Singleton;
        }
    );

Subscribe项目代码:

var services = new ServiceCollection();
services
    .AddMessagePipe()
    .AddUdpInterprocess(
        "127.0.0.1",
        3215,
        options =>
        {
            options.InstanceLifetime = InstanceLifetime.Singleton;
        }
    );
2.2 实现代码

两个项目通过构造函数注入方式注入IDistributedPublisher接口。

Publish项目,通过一个按钮的命令实现发送消息的功能:实现代码如下:

 [RelayCommand]
 private async Task PublishAsync()
 {
     await _distributedPublisher.PublishAsync(
         "abc",
         $"Message:{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}"
     );
 }

按钮点击一次,发送一次消息。
Subscribe项目中在窗口的Loaded方法中进行实现对订阅消息的接收,并将消息添加到列表中进行展示。

[RelayCommand]
private async Task LoadedAsync()
{
    await _distributedSubscriber.SubscribeAsync(
        "abc",
        message =>
        {
            Application.Current.Dispatcher.InvokeAsync(() =>
            {
                Messages.Add(message);
            });
        }
    );
}
2.3 运行效果

作者:芝麻麻雀 出处:https://www.cnblogs.com/sesametech-netcore/ 本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。

标签:InstanceLifetime,MessagePipe,项目,间通信,services,进程,options
From: https://www.cnblogs.com/sexintercourse/p/18439105

相关文章

  • 进程和线程的区别和联系
    什么是进程(process)每个应⽤程序运⾏于现代操作系统之上时,操作系统会提供⼀种抽象,好像系统上只有这个程序在运⾏,所有的硬件资源都被这个程序在使⽤。这种假象是通过抽象了⼀个进程的概念来完成的,进程可以说是计算机科学中最重要和最成功的概念之⼀。进程是操作系统对⼀......
  • 【专题】新能源发电行业及其市场化进程概览白皮书报告合集PDF分享(附原数据表)
    原文链接:https://tecdat.cn/?p=37802随着中国经济结构的持续优化以及能源政策的不断进步,我国的能源消费呈现出稳定增长的态势。与此同时,能源利用效率逐步提高,清洁能源在能源结构中的比例也在稳步上升,这为国家的可持续发展战略提供了有力的支撑。文末204份电力行业研究报告最新趋......
  • systemtap跟踪进程生命周期
    systemtapman:https://sourceware.org/systemtap/man/本来追踪进程生命周期可以用syscall.fork和syscall.exit之类的。但是有时候它们会失效(或者部分失效)。所以更好的方式是用kprocess系列,文档:https://sourceware.org/systemtap/man/tapset::kprocess.3stap.htmlkprocess.cre......
  • Linux 进程控制
    目录1.fork函数2.getpid/getppid函数3.父进程与子进程创建子进程:PID和PPID:资源继承:独立性:执行流程:退出和终止:僵尸进程:孤儿进程:进程组和会话:fork()的用途:4.父进程与子进程的应用场景:1.fork函数    一个进程,包括代码,数据和分配给进程的资源。    ......
  • 三篇文章速通JavaSE到SpringBoot框架 (中) IO 进程线程 网络编程 XML MySQL JDBC相关
    文章目录IOfile类的作用I/O的作用将上篇文章综合项目使用IO流升级所需知识点进程线程创建线程的三种方式网络编程网络编程介绍IP地址端口号网络通信协议网络通信协议的分层演示代码XMLXML的作用是什么?xml特点注解什么是注解?注解的使用注解的重要性注解的使用实例M......
  • 【Linux】进程控制
     ......
  • 嵌入式学习——进程间通信方式(2)—— 信号
    一、基本概念什么是信号:由进程或系统发出的,用来通知发生了某个事件,希望接收方进行响应。    信号是进程间通信机制中唯一的异步通信机制,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。正如我们所了解的中断服务函数一样,在中断发......
  • PARTV-Oracle实例架构-进程架构
    15.进程架构15.1.进程简介进程是操作系统中可以运行一系列步骤的机制。这个机制取决于操作系统。例如,在Linux上,Oracle后台进程是一个Linux进程。在Windows上,Oracle后台进程是进程内的执行线程。代码模块由进程运行。所有连接到Oracle数据库的用户都必须运行以下模块......
  • 利用Python开发Exporter,集成Prometheus和Grafana对进程监控
    利用Python开发Exporter,集成Prometheus和Grafana对进程监控在现代软件开发和运维中,监控是确保系统稳定运行和快速响应问题的重要手段。Prometheus和Grafana的组合是监控领域的强大工具,它们能够收集、处理和展示各种指标数据。本文将介绍如何利用Python开发一个Exporter,通过Promet......
  • 进程的基本
    1.冯诺依曼体系结构我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系结构截至目前为止,我们所认识的计算机,都是由一个个硬件组件组成的:输入单元:包括键盘,鼠标,扫描仪,写板等中央处理器(CPU):含有运算器和控制器等输出单元:显示器,打印机等关于......