• c# 说说开发通用通信库,尤其是分布式服务的通信


    来,牛皮需要吹起,IT行业需要自娱自乐。开篇吹牛。。。。。

    现在我们通信真是各种各样,各种组件,但是就我的看法,功能越完善,封装越完善,牺牲的性能可能就越大,代码量就越大。

    当然这不能阻挡IT大军的脚步,那我们一套软件上线后怎么办,软件到中途发现通信组件有问题怎么办,怎么去改?如果是多部门,多单位协作怎么办?

    所以面对通用的模块处理时,就需要解决相关的问题,如果在可以预见的范围,你的通信仅仅自己用,这个项目用,用于不会改,那就无所谓了;这里涉及一个软件开发矛盾。你想要要灵活,那么意味着你的配置多,代码多,需要各种判断,你的代码就多了很多分支,性能可能就低了。相反,你写的越死,代码可能就越少,分支少,性能可能高。如何在项目中控制,需要根据自己的业务去预判,预判不等于全对,但是如果你是项目负责人,那就可以为大家减少重复工作。

    废话完了,给大家一个通信模型,其实就是一个接口库。给大家提供思路。

    1.定义客户端通信接口, ISocketClient<TData>,解决客户端通信

    2.定义服务端通信接口, ISocketServer<TData>,解决服务端通信

    3.定义一个特写NetProtocol,里面有一个名称字段。

    4.定义一个接收数据的委托和传递给业务层的数据类NetChannel。

    5.定义一个通信配置类TransferConfig,静态类,里面就一个属性,表示传输组件的dll文件目录

    6.定义一个组件加载类TransferDLL,动态加载通信组件,找到客户端,服务端的类对象

    7.定义一个通信对象的创建类NetFactory,解决通信对象创建问题

    具体说说:

    有了以上的接口定义库,可以动态加载通信组件,我们在使用时,通过NetFactory创建不同通信对象,

    原理:在NetFactory中提供创建客户端和服务端的通信对象,返回的都是我们定义的通信接口对象。

           在创建方法中,需要你传送一个名字,这个名字就是你通信组件的名字。

    例如:

    我们使用dotnetty,你们我在实现通信的项目中,客户端类NettyClient继承ISocketClient,同时在NettyClient类上使用特性NetProtocol,比如是这样:NetProtocol(“netty_client”),那么创建客户端对象时,传入名称“netty”即可,这样通信对象就建立了。;服务端一样,服务端名称就是netty_server.

    在软件的最外层,只需订阅配置,采用的传输组件名称,即可启用不同的传输组件。还可以动态替换,只要你的配置是动态加载的。

    多说一句,我们的配置如果要达到动态,一般是采用什么方法呢?

    1.定时重新加载,每1天或者几个小时,重新加载一次设置的配置。然后重新处理。

    2.c#提供了文件监视,发现文件动了,简单的比较下文件,采用不同处理

    3.你的程序提供简单的文件替换升级功能。

     例如:设置一个目录,程序定时监测或者直接监视目录,发现有新的配置文件,就说明你升级了配置文件,监测文件进行处理。

    项目地址:

    https://github.com/jinyuttt/StremCloud.git
    其中的SrvNetSocket项目就是通信接口定义。
    ---------------------
    作者:jason成都
    来源:CSDN
    原文:https://blog.csdn.net/jinyuttt/article/details/83020196?utm_source=copy
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    分布式搜索elasticsearch 基本概念
    hdoj 4828 卡特兰数取模
    Tyvj3308毒药解药题解
    安全类工具制作第004篇:进程管理器(上)
    UVA
    G 全然背包
    指针结构体函数-事实上能够这样具体理解
    关于大型站点技术演进的思考(七)--存储的瓶颈(7)
    Testing Is the Engineering Rigor of Software Development
    poj 1273 Drainage Ditches(最大流)
  • 原文地址:https://www.cnblogs.com/jinyu20180311/p/9788584.html
Copyright © 2020-2023  润新知