gpt4 book ai didi

使用MessagePipe实现进程间通信

转载 作者:撒哈拉 更新时间:2024-09-28 14:20:49 61 4
gpt4 key购买 nike

1、MessagePipe介绍

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

支持:

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

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

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

还提供了Roslyn分析器以防止订阅泄露。 本库采用MIT协议 。

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

2.1 新建两个Wpf项目

项目名称分别为:MessagePipePublishApp和MessagePipeSubscribeApp,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 运行效果

最后此篇关于使用MessagePipe实现进程间通信的文章就讲到这里了,如果你想了解更多关于使用MessagePipe实现进程间通信的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

61 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com