来,牛皮需要吹起,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
版权声明:本文为博主原创文章,转载请附上博文链接!

c# 说说开发通用通信库,尤其是分布式服务的通信的更多相关文章

  1. CAP-微服务间通信实践

    微服务间通信常见的两种方式 由于微服务架构慢慢被更多人使用后,迎面而来的问题是如何做好微服务间通信的方案.我们先分析下目前最常用的两种服务间通信方案. gRPC(rpc远程调用) gRPC-微服务间通 ...

  2. 007. 服务间通信 RPC & REST over HTTP(s) & 消息队列

    服务间通信 服务间通信的几种方式: RPC.REST over HTTP(s).消息队列.  https://www.jianshu.com/p/2a01d4383d0b RPC https://bl ...

  3. sklearn:Python语言开发的通用机器学习库

    引言:深入理解机器学习并全然看懂sklearn文档,须要较深厚的理论基础.可是.要将sklearn应用于实际的项目中,仅仅须要对机器学习理论有一个主要的掌握,就能够直接调用其API来完毕各种机器学习问 ...

  4. centos 通用开发工具及库安装 有了它不用愁了

    通用开发工具及库:# yum groupinstall "Development Tools" "Development Libraries"

  5. [转] iOS开发之使用lipo命令制作模拟器与真机通用静态库

    转自 http://blog.csdn.net/jinglijun/article/details/8276089 通常在项目中使用静态库的时候都会有两个版本,一个用于模拟器,一个用于真机,因为Mac ...

  6. iOS开发--使用lipo命令制作模拟器与真机通用静态库

    通常在项目中使用静态库的时候都会有两个版本,一个用于模拟器,一个用于真机,因为Mac和iPhone的CPU不同,才造成了这种情况. 为了模拟器与真机之间切换调试的方便,制作通用版本非常有必要. 现在有 ...

  7. ZeroMQ:云时代极速消息通信库

    ZeroMQ:云时代极速消息通信库(大规模|可扩展|低成本|高效率解决之道,大规模分布式|多线程应用程序|消息传递架构构建利器) [美]Pieter Hintjens(皮特.亨特金斯)著   卢涛 李 ...

  8. 基于memcached的单机轻量级通用缓存库minicached的实现

    一.前言 之前拜读过淘宝子柳的<淘宝技术这十年>之大作,深知缓存技术在系统优化中起着一个举足轻重的作用.无论是文件系统静态文件,数据库的访问,乃至网络数据的请求,只要是与内存访问速度相差较 ...

  9. iOS开发常用第三方库

    UI 动画 网络相关 Model 其他 数据库 缓存处理 PDF 图像浏览及处理 摄像照相视频音频处理 响应式框架 消息相关 版本新API的Demo 代码安全与密码 测试及调试 AppleWatch ...

随机推荐

  1. hdu 2196 叶子节点最长距离(树DP)

    http://www.cnblogs.com/kuangbin/archive/2012/08/28/2659915.html 求每个节点到叶子节点的最长距离 需要保存每个节点到叶子节点距离的最大值和 ...

  2. java常用API之字符串缓冲区

    StringBuffer类: StringBuffer是个字符串的缓冲区,是可变的字符串数组,即就是它是一个容器,容器中可以装很多字符串.并且能够对其中的字符串进行各种操作 StringBuffer的 ...

  3. cf547D. Mike and Fish(欧拉回路)

    题意 题目链接 Sol 说实话这题我到现在都不知道咋A的. 考试的时候是对任意相邻点之间连边,然后一分没有 然后改成每两个之间连一条边就A了.. 按说是可以过掉任意坐标上的点都是偶数的数据啊.. #i ...

  4. 封装微信jssdk自定义分享代码

    var protocol = window.location.protocol; //获取协议 var host = window.location.host; //获取域名 var posuDoma ...

  5. 分享一个好东西(一天精通MongoDB数据库)

    https://pan.baidu.com/s/1o7V5e8U 总共几个小时的视频,看了之后醍醐灌顶.分享出来.

  6. MCU & 51单片机

  7. Angular js 双向绑定时字符串的转换成 数字类型的问题

    问题: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <scrip ...

  8. blog test

    try my first blog by cnblog. i will record my learn experence in the future.

  9. Document flow API in SAP CRM and C4C

    Document flow API in CRM 以一个具体的例子来说明.在Appointment的Overview page上能看见一个名叫Reference的区域,这里可以维护一些其他的业务文档的 ...

  10. 从零开始Vue项目实战(二)-搭建环境

    1.下载node.js并安装 下载地址:https://nodejs.org/en/download/. 下载.msi 格式的直接连续下一步就可以了.安装完成后可以用 node -v 和 npm -v ...