static void Main(string[] args) { var wire = new WireSerializer(new[] { typeof(HelloRequest), typeof(HelloResponse) }); Serialization.RegisterSerializer(wire, true); Console.Title = "服务端"; var actorid = "this1234"; var dbfile = @"C:\MyFile\Source\Repos\Asp.NetCoreExperiment\Asp.NetCoreExperiment\ProtoActor\ServiceA\data.sqlite"; var sqliteProvider = new SqliteProvider(new SqliteConnectionStringBuilder() { DataSource = dbfile }); var localActor = new LocalActor(sqliteProvider, actorid); var props = Actor.FromProducer(() => localActor); Remote.RegisterKnownKind("hello", props); Remote.Start("127.0.0.1", 12000); Console.WriteLine("服务端开始……"); Console.ReadLine(); Console.ReadLine(); }
static void Main(string[] args) { Console.Title = "服务端"; var wire = new WireSerializer(new[] { typeof(HelloRequest), typeof(HelloResponse) }); Serialization.RegisterSerializer(wire, true); var props = Actor.FromFunc(ctx => { switch (ctx.Message) { case HelloRequest helloRequest: Console.WriteLine("服务端接收到:" + helloRequest.Message); ctx.Respond(new HelloResponse { Message = "Hello from node 1" }); break; } return(Actor.Done); }); var parsedArgs = ParseArgs(args); Remote.RegisterKnownKind("HelloKind", props); Cluster.Start("MyCluster", parsedArgs.ServerName, 12000, new ConsulProvider(new ConsulProviderOptions(), c => c.Address = new Uri("http://" + parsedArgs.ConsulUrl + ":8500/"))); Thread.Sleep(Timeout.Infinite); Console.WriteLine("Shutting Down..."); Cluster.Shutdown(); }
static void Main(string[] args) { Console.Title = "服务端"; Console.WriteLine("回车开始"); Console.ReadLine(); var wire = new WireSerializer(new[] { typeof(HelloRequest), typeof(HelloResponse) }); Serialization.RegisterSerializer(wire, true); //var json = new JsonSerializer(); //Serialization.RegisterSerializer(json, true); var props = Actor.FromFunc(ctx => { switch (ctx.Message) { case HelloRequest msg: Console.WriteLine(msg.Message); ctx.Respond(new HelloResponse { Message = "回应:我是服务端", }); break; default: break; } return(Actor.Done); }); Remote.RegisterKnownKind("hello", props); Remote.Start("127.0.0.1", 12000); Console.WriteLine("服务端开始……"); Console.ReadLine(); }
static void Main(string[] args) { Console.Title = "客户端"; var wire = new WireSerializer(new[] { typeof(HelloRequest), typeof(HelloResponse) }); Serialization.RegisterSerializer(wire, true); var parsedArgs = parseArgs(args); Cluster.Start("MyCluster", parsedArgs.ServerName, 12001, new ConsulProvider(new ConsulProviderOptions(), c => c.Address = new Uri("http://" + parsedArgs.ConsulUrl + ":8500/"))); var(pid, sc) = Cluster.GetAsync("TheName", "HelloKind").Result; while (sc != ResponseStatusCode.OK) { (pid, sc) = Cluster.GetAsync("TheName", "HelloKind").Result; } var res = pid.RequestAsync <HelloResponse>(new HelloRequest() { Message = "请求信息" }).Result; Console.WriteLine("客户端收到信息:" + res.Message); Thread.Sleep(Timeout.Infinite); Console.WriteLine("Shutting Down..."); Cluster.Shutdown(); }
static void Main(string[] args) { var context = new RootContext(); var wire = new WireSerializer(new[] { typeof(HelloRequest), typeof(HelloResponse) }); Serialization.RegisterSerializer(wire, true); var parsedArgs = parseArgs(args); // SINGLE REMOTE INSTANCE Cluster.Start("MyCluster", parsedArgs.ServerName, 12002, new SingleRemoteInstanceProvider("127.0.0.1", 12000)); // CONSUL //if(parsedArgs.StartConsul) //{ // StartConsulDevMode(); //} //Cluster.Start("MyCluster", parsedArgs.ServerName, 12001, new ConsulProvider(new ConsulProviderOptions(), c => c.Address = new Uri("http://" + parsedArgs.ConsulUrl + ":8500/"))); var(pid, sc) = Cluster.GetAsync("TheName", "HelloKind").Result; while (sc != ResponseStatusCode.OK) { (pid, sc) = Cluster.GetAsync("TheName", "HelloKind").Result; } var res = context.RequestAsync <HelloResponse>(pid, new HelloRequest()).Result; Console.WriteLine(res.Message); Thread.Sleep(Timeout.Infinite); Console.WriteLine("Shutting Down..."); Cluster.Shutdown(); }
static void Main(string[] args) { //Registering "knownTypes" is not required, but improves performance as those messages //do not need to pass any typename manifest var wire = new WireSerializer(new[] { typeof(Ping), typeof(Pong), typeof(StartRemote), typeof(Start) }); Serialization.RegisterSerializer(wire, true); Remote.Start("127.0.0.1", 12000); Actor.SpawnNamed(Actor.FromProducer(() => new EchoActor()), "remote"); Console.ReadLine(); }
private static void SwitchToWire() { //Registering "knownTypes" is not required, but improves performance as those messages //do not need to pass any typename manifest var wire = new WireSerializer(new[] { typeof(CalcOptions), typeof(PiNumber), typeof(StartRemote), typeof(Start) }); Serialization.RegisterSerializer(wire, true); }
private async Task OrderComplete(IContext context) { //设置序列化类型并注册 var wire = new WireSerializer(new[] { typeof(Ship), typeof(bool) }); Serialization.RegisterSerializer(wire, true); //设置自己监控端口5002 Remote.Start("127.0.0.1", 5002); //连接服务端5001 var pid = Remote.SpawnNamedAsync("127.0.0.1:5001", "shiping", "ship", TimeSpan.FromSeconds(50)).Result.Pid; var result = await pid.RequestAsync <bool>(context.Message); Console.WriteLine(result); }
static async Task Main(string[] args) { var system = new ActorSystem(); var context = new RootContext(system); //Registering "knownTypes" is not required, but improves performance as those messages //do not need to pass any typename manifest var remoteConfig = GrpcCoreRemoteConfig.BindToLocalhost(12001); system.WithRemote(remoteConfig); var wire = new WireSerializer(new[] { typeof(Ping), typeof(Pong), typeof(StartRemote), typeof(Start) }); system.Serialization().RegisterSerializer(wire, true); await system.Remote().StartAsync(); var messageCount = 1000000; var wg = new AutoResetEvent(false); var props = Props.FromProducer(() => new LocalActor(0, messageCount, wg)); var pid = context.Spawn(props); var remotePid = new PID("127.0.0.1:12000", "remote"); context.RequestAsync <Start>(remotePid, new StartRemote { Sender = pid }).Wait(); var start = DateTime.Now; Console.WriteLine("Starting to send"); var msg = new Ping(); for (var i = 0; i < messageCount; i++) { context.Send(remotePid, msg); } wg.WaitOne(); var elapsed = DateTime.Now - start; Console.WriteLine("Elapsed {0}", elapsed); var t = messageCount * 2.0 / elapsed.TotalMilliseconds * 1000; Console.WriteLine("Throughput {0} msg / sec", t); Console.ReadLine(); }
static void Main(string[] args) { var system = new ActorSystem(); var context = new RootContext(system); var serialization = new Serialization(); //Registering "knownTypes" is not required, but improves performance as those messages //do not need to pass any typename manifest var wire = new WireSerializer(new[] { typeof(Ping), typeof(Pong), typeof(StartRemote), typeof(Start) }); serialization.RegisterSerializer(wire, true); var Remote = new Remote(system, serialization); Remote.Start("127.0.0.1", 12000); context.SpawnNamed(Props.FromProducer(() => new EchoActor()), "remote"); Console.ReadLine(); }
static void Main(string[] args) { Console.Title = "服务端"; //设置序列化类型并注册 var wire = new WireSerializer(new[] { typeof(Ship) }); Serialization.RegisterSerializer(wire, true); var props = Actor.FromProducer(() => new ShipActor()); //注册一个为hello类别的 Remote.RegisterKnownKind("ship", props); //服务端监控端口5001 Remote.Start("127.0.0.1", 5001); Console.WriteLine("服务端开始……"); Console.ReadLine(); }
static void Main(string[] args) { Console.Title = "服务端"; // var context = new RootContext(); //Registering "knownTypes" is not required, but improves performance as those messages //do not need to pass any typename manifest var wire = new WireSerializer(new[] { typeof(Ping), typeof(Pong), typeof(StartRemote), typeof(Start) }); Serialization.RegisterSerializer(wire, true); Remote.Start("127.0.0.1", 12001); var messageCount = 1000000; var wg = new AutoResetEvent(false); var props = Actor.FromProducer(() => new LocalActor(0, messageCount, wg)); var pid = Actor.Spawn(props); var remote = new PID("127.0.0.1:12000", "remote"); remote.RequestAsync <Start>(new StartRemote { Sender = pid }).Wait(); var start = DateTime.Now; Console.WriteLine("Starting to send"); var msg = new Ping(); for (var i = 0; i < messageCount; i++) { remote.SendSystemMessage(msg); } wg.WaitOne(); var elapsed = DateTime.Now - start; Console.WriteLine("Elapsed {0}", elapsed); var t = messageCount * 2.0 / elapsed.TotalMilliseconds * 1000; Console.WriteLine("Throughput {0} msg / sec", t); Console.ReadLine(); }
async Task RemoteSend(Ship ship) { //设置序列化类型并注册 var wire = new WireSerializer(new[] { typeof(Ship), typeof(bool) }); Serialization.RegisterSerializer(wire, true); //设置自己监控端口5002 Remote.Start("127.0.0.1", 5002); //连接服务端5001 var pid = Remote.SpawnNamedAsync("127.0.0.1:5001", "shiping", "ship", TimeSpan.FromSeconds(50)).Result.Pid; var result = await pid.RequestAsync <bool>(ship); Console.WriteLine($"下订单返回结果:{result}"); if (result) { await _persistence.DeleteEventsAsync(10); } }
static void Main(string[] args) { Console.Title = "客户端"; Console.WriteLine("回车开始"); var wire = new WireSerializer(new[] { typeof(HelloRequest), typeof(HelloResponse) }); Serialization.RegisterSerializer(wire, true); Remote.Start("127.0.0.1", 12001); var pid = Remote.SpawnNamedAsync("127.0.0.1:12000", "remote", "hello", TimeSpan.FromSeconds(5)).Result.Pid; while (true) { Console.WriteLine("请输入一个数字:"); var num = int.Parse(Console.ReadLine()); var res = pid.RequestAsync <HelloResponse>(new HelloRequest { Message = "请求:我是客户端", Amount = num }).Result; Console.WriteLine(res.Message); } }
static void Main(string[] args) { Console.Title = "客户端"; Console.WriteLine("回车开始"); Console.ReadLine(); //设置序列化类型并注册 var wire = new WireSerializer(new[] { typeof(HelloRequest), typeof(HelloResponse) }); Serialization.RegisterSerializer(wire, true); //设置自己监控端口5002 Remote.Start("127.0.0.1", 5002); //连接服务端5001 var pid = Remote.SpawnNamedAsync("127.0.0.1:5001", "clientActor", "hello", TimeSpan.FromSeconds(50)).Result.Pid; while (true) { var res = pid.RequestAsync <HelloResponse>(new HelloRequest { Message = $"请求:我是客户端 【{DateTime.Now}】" }).Result; Console.WriteLine(res.Message); Console.ReadLine(); } }