智能预判 (四:命名管道连接逻辑和通信)

在测试中发现。单进程中,批量处理数据,会导致通信停滞。多线程并不能解决,所以采取  逻辑处理 和 通信 分开两个项目的方法。

连接这两个 服务器的 桥梁,选择了  命名管道 通信。

是的,他 比 socket 走tcp 的方式,更快 更安全,尤其是 大数据并发的时候,100倍socket也 不为过。

当然,他没有 socekt流行,原因 不能 外网 访问。不过在 服务器之间的 传输 数据 中,却能发挥 最大的优势。

 

我的智能预判 分 4步骤

后台 数据通信架构

前台 数据通信架构

前台 模拟架构

后台 模拟架构

每块架构 都是 需要 慢慢 完善的,没有 优先级 之分。

最后列出 命名管道 通信 加 线程 的 demo。

using LitJson;
using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Pipes;
using System.Linq;
using System.Security.Principal;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            Thread threads = new Thread(new ParameterizedThreadStart(ThreadMethod));//开启线程
            threads.IsBackground = true;
            threads.Start(ClientPipes());//命名管道在线程中 轮询
            Console.ReadKey();
        }


        public static void ThreadMethod(object data)
        {
            StreamReader rdr = data as StreamReader;
            string temp;
            while ((temp = rdr.ReadLine()) != null)
            {
                JsonData json = JsonMapper.ToObject(temp);

                Console.WriteLine(json["task"].ToString()
                + json["id"]
                + json["time"]
                + json["attack"]
                + json["beaten"]
                + json["soldier"]
                + json["isover"]
                + json["attackname"]
                + json["beatenname"]
               );
            } 
        }

        //命名管道服务器开启
        public static StreamReader ClientPipes()
        {
            NamedPipeClientStream pipeStream = new NamedPipeClientStream("mypipe");
            pipeStream.Connect();
            //在client读取server端写的数据
            StreamReader rdr = new StreamReader(pipeStream);
            return rdr;
        }
    }
}
using LitJson;
using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Pipes;
using System.Linq;
using System.Security.Principal;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApplication4
{

    class Program
    {
        static void Main(string[] args)
        {
            feiServer();
        //    Server();
        }
        static void feiServer()
        {
            using (NamedPipeServerStream pipeStream = new NamedPipeServerStream("testpipe"))
            {
                pipeStream.WaitForConnection();

                using (StreamWriter writer = new StreamWriter(pipeStream))
                {
                    writer.AutoFlush = true;
                    string temp;
                      
                    while ((temp = Console.ReadLine()) != "stop")
                    {
                     //   writer.WriteLine(temp);
                        JsonData message = new JsonData();
                        message["type"] = "颠三倒四";
                        message["Mode"] = "AppointChat";
                        writer.WriteLine(message.ToJson());
                    } 
                }
            }
        } 

    }
}

 

以上demo,我已经整合到通信项目中了,逻辑这方面就不发给大家了。

posted on 2016-05-13 12:30  太粗难进  阅读(429)  评论(0编辑  收藏  举报