我在一台计算机上运行多个应用程序。一种是工作,然后将有关其完成情况的日志写入磁盘(我将其称为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/