Example #1
0
        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();
        }
Example #3
0
        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();
        }
Example #5
0
        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();
        }
Example #6
0
        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();
        }
Example #7
0
        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);
        }
Example #8
0
        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();
    }
Example #10
0
        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();
        }
Example #11
0
        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();
        }
Example #12
0
    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();
    }
Example #13
0
        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);
            }
        }
Example #15
0
        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();
            }
        }