我在一台计算机上运行多个应用程序。一种是工作,然后将有关其完成情况的日志写入磁盘(我将其称为WorkerApp),另一种是总结有关WorkerApp状态的支持信息以及更多详细信息(我将其称为“仪表板”)。

我想从Dashboard指示WorkerApp采取操作(例如,“Ping远程服务”),并且我希望WorkerApp在收到Dongboard的响应后将其发送给“Pong”响应。

我已经看到了使用SendMessage的示例,但这似乎很陈旧(2016年现在在流程通信之间没有更多的标准了吗?)。

我对Akka.Net的经验很少,但是它的Remoting功能似乎是一种不错的方法,尽管设置它似乎对我想做的事情有些过大。

当前在.Net中的两个进程之间进行通信的最简单方法是什么?是否有一些在本地计算机上工作的示例?

最佳答案

为此,我整理了一个Akka.Net示例。这就是它的样子。

DashBoard(发送消息)

using System;
using Akka.Actor;
using Akka.Configuration;

namespace DashBoard
{
    class Program
    {
        static void Main(string[] args)
        {
            var config = ConfigurationFactory.ParseString(@"
akka {
    actor {
        provider = ""Akka.Remote.RemoteActorRefProvider, Akka.Remote""
    }
    remote {
        helios.tcp {
            transport-class = ""Akka.Remote.Transport.Helios.HeliosTcpTransport, Akka.Remote""
            applied-adapters = []
            transport-protocol = tcp
            port = 0
            hostname = localhost
        }
    }
}
");

            using (var system = ActorSystem.Create("Dashboard", config))
            {
                var server = system.ActorSelection("akka.tcp://WorkerApp@localhost:8081/user/WorkerAppActor");
                while (true)
                {
                    var input = Console.ReadLine();
                    server.Tell(input);
                }
            }
        }
    }
}

WorkerApp(接收消息)
using System;
using Akka.Actor;
using Akka.Configuration;

namespace WorkerApp
{
    class Program
    {
        static void Main(string[] args)
        {
            var config = ConfigurationFactory.ParseString(@"
akka {
    actor {
        provider = ""Akka.Remote.RemoteActorRefProvider, Akka.Remote""
    }
    remote {
        helios.tcp {
            transport-class = ""Akka.Remote.Transport.Helios.HeliosTcpTransport, Akka.Remote""
            applied-adapters = []
            transport-protocol = tcp
            port = 8081
            hostname = localhost
        }
    }
}
");

            using (var system = ActorSystem.Create("WorkerApp", config))
            {
                system.ActorOf<WorkerAppActor>("WorkerAppActor");

                Console.ReadLine();
            }
        }
    }

    class WorkerAppActor : TypedActor, IHandle<string>
    {
        public void Handle(string message)
        {
            Console.WriteLine($"{DateTime.Now}: {message}");
        }
    }
}

关于c# - 如何在不使用SendMessage的情况下将 "Message"发送到.Net中的另一个进程?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38014015/

10-09 09:30