zoukankan      html  css  js  c++  java
  • 突破自我,开源NetWorkSocket通讯组件

    前言

    在《化茧成蝶,开源NetWorkSocket通讯组件》发表之后,收到大家很多个star,在此感谢!更可贵的是,一些网友提出了许多好建议,经过一些时间的思考,决定将NetworkSocket从模仿MVC之后,继续模仿Owin,并局部突破,作有自己特色和理念的通讯框架。之所以模仿Owin而不是接入,是因为Open Web Interface for .NET是为Web而存在的,我需要的是应该是Open Tcp Interface for .NET,当然这是还不存在的标准,但我想达到或接近这种标准,服务器和通讯协议分离不耦合,通讯协议以中间件开发,对于想开发自定义协议的开发者,只要开发一个中间件就够了,对于一般使用者,想使用哪此功能,就Use相关的中间件就可以。

    OTin思想

    我把框架分为服务器和中间件两大部分,服务器监听连接、维护连接会话和收到会话请求时执行中间件,中间件是具体的执行单元,往往和某种协议有关系,或者说是某种协议实现的framework。NetworkSocket的http协议、websocket协议支持分别是HttpMiddleware和WebsocketMiddleware

    namespace NetworkSocket
    {
        /// <summary>
        /// 定义监听者的行为
        /// </summary>
        public interface IListener : IDisposable
        {
            /// <summary>
            /// 使用中间件
            /// </summary>
            /// <param name="middleware">中间件</param>
            void Use(IMiddleware middleware);
    
            /// <summary>
            /// 开始启动监听       
            /// </summary>
            /// <param name="port">端口</param>
            void Start(int port);
        }
    }
    IListener
    namespace NetworkSocket
    {
        /// <summary>
        /// 定义中间件的行为
        /// </summary>
        public interface IMiddleware
        {
            /// <summary>
            /// 下一个中间件
            /// </summary>
            IMiddleware Next { set; }
    
            /// <summary>
            /// 执行中间件          
            /// </summary>
            /// <param name="context">上下文</param>
            /// <returns></returns>
            Task Invoke(IContenxt context);
        }
    }
    IMiddleware
    namespace NetworkSocket
    {
        /// <summary>
        /// 定义Socket的上下文
        /// </summary>
        public interface IContenxt
        {
            /// <summary>
            /// 获取当前会话对象
            /// </summary>
            ISession Session { get; }
    
            /// <summary>
            /// 获取当前会话收到的历史数据
            /// </summary>
            IReceiveBuffer Buffer { get; }
    
            /// <summary>
            /// 获取所有会话对象
            /// </summary>
            ISessionProvider AllSessions { get; }
        }
    }
    IContenxt

    其中最重要的就是三个接口,IListener负责生成IContenxt传递给IMiddleware执行。如果有多个IListener实现者,那么中间件也可以在这多个IListener实现者中运行。NetworkSocket原来支持的http等功能,虽然改为中间件形式实现了,但使用风格还是保持不变。这个正像支持 Owin的webApi开发和MVC4 WebApi开发风格上没什么大变化一样。而且原来一端口一协议的弊端现在也不存在了,单端口可以支持多协议,只要这些协议不冲突,现在,多协议的通讯变成了中间件的选择而已:

    public class HomeController : HttpController
    {
        [HttpPost]
        public ActionResult Index(User user, bool fAdmin = false)
        {
            return Json(new { state = true });
        }
    }
    
    public class FastMathService : FastApiService
    {
        [Api]
        public int GetSum(int x, int y, int z)
        {
            return x + y + z;
        }
    }
    
    public class WebSocketSystemService : JsonWebSocketApiService
    {
        [Api]
        public UserInfo[] SearchUsers(string name)
        {
            return new UserInfo[0];
        }
    }
    
    var listener = new TcpListener();
    listener.Use<HttpMiddleware>();
    listener.Use<JsonWebSocketMiddleware>();
    listener.Use<FastMiddleware>();            
    listener.Start(1212);


    如何使用

    在这里我不想把NetworkSocket的功能贴出然后介绍有多Easy等等了,这显得没必要了。我精心了作了一个Demo,里面刚好是入门使用的介绍,功能全面而有趣。

    重定义这个组件

    现在,我想重新定义这个组件:

    这是一个通讯服务和协议完全分离的框架,单端口允许多种通讯协议并存,除了内置的Http、WebSocket、Flex策略和Fast中间件,开发者还可以开发自己的中间件并安装到通讯服务

     感谢你的阅读,如果对源代码感兴趣,可以上github提建议:https://github.com/xljiulang/NetworkSocket

  • 相关阅读:
    (十三)网络html查看器
    (十二)handler消息处理机制
    (十一)ANR产生原理
    (十)android 中数据存储与访问——使用SharedPreferences保存数据
    (九)android 中数据存储与访问——保存文件到手机内存
    (八)activity的生命周期
    (七)android 通知对话框,并且监听了返回键,当按下返回键也会创建一个对话框
    (六)采用HTML创建UI
    (五)使用代码创建UI
    (六)代码编写UI
  • 原文地址:https://www.cnblogs.com/kewei/p/5071393.html
Copyright © 2011-2022 走看看