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
版权声明:本文为博主原创文章,转载请附上博文链接!
c# 说说开发通用通信库,尤其是分布式服务的通信的更多相关文章
- CAP-微服务间通信实践
微服务间通信常见的两种方式 由于微服务架构慢慢被更多人使用后,迎面而来的问题是如何做好微服务间通信的方案.我们先分析下目前最常用的两种服务间通信方案. gRPC(rpc远程调用) gRPC-微服务间通 ...
- 007. 服务间通信 RPC & REST over HTTP(s) & 消息队列
服务间通信 服务间通信的几种方式: RPC.REST over HTTP(s).消息队列. https://www.jianshu.com/p/2a01d4383d0b RPC https://bl ...
- sklearn:Python语言开发的通用机器学习库
引言:深入理解机器学习并全然看懂sklearn文档,须要较深厚的理论基础.可是.要将sklearn应用于实际的项目中,仅仅须要对机器学习理论有一个主要的掌握,就能够直接调用其API来完毕各种机器学习问 ...
- centos 通用开发工具及库安装 有了它不用愁了
通用开发工具及库:# yum groupinstall "Development Tools" "Development Libraries"
- [转] iOS开发之使用lipo命令制作模拟器与真机通用静态库
转自 http://blog.csdn.net/jinglijun/article/details/8276089 通常在项目中使用静态库的时候都会有两个版本,一个用于模拟器,一个用于真机,因为Mac ...
- iOS开发--使用lipo命令制作模拟器与真机通用静态库
通常在项目中使用静态库的时候都会有两个版本,一个用于模拟器,一个用于真机,因为Mac和iPhone的CPU不同,才造成了这种情况. 为了模拟器与真机之间切换调试的方便,制作通用版本非常有必要. 现在有 ...
- ZeroMQ:云时代极速消息通信库
ZeroMQ:云时代极速消息通信库(大规模|可扩展|低成本|高效率解决之道,大规模分布式|多线程应用程序|消息传递架构构建利器) [美]Pieter Hintjens(皮特.亨特金斯)著 卢涛 李 ...
- 基于memcached的单机轻量级通用缓存库minicached的实现
一.前言 之前拜读过淘宝子柳的<淘宝技术这十年>之大作,深知缓存技术在系统优化中起着一个举足轻重的作用.无论是文件系统静态文件,数据库的访问,乃至网络数据的请求,只要是与内存访问速度相差较 ...
- iOS开发常用第三方库
UI 动画 网络相关 Model 其他 数据库 缓存处理 PDF 图像浏览及处理 摄像照相视频音频处理 响应式框架 消息相关 版本新API的Demo 代码安全与密码 测试及调试 AppleWatch ...
随机推荐
- for计算位置坐标
代码1效果图: 代码2效果图: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"&g ...
- 菜鸟学习Spring——SpringMVC注解版将URL中的参数转成实体
一.概述 将URL中参数转成实体在我们项目中用的很多比如界面提交表单请求后台的Contorller的时候通过URL传递了一串参数到后台,后台通过Spring让界面的字段与实体的字段映射来实现给后台的实 ...
- OSGi Bundle
OSGi Framework looks like OS, Bundle looks like program, OS can create a process to run program with ...
- ASP.NET MVC 音乐商店 - 6. 使用 DataAnnotations 进行模型验证
在前面的创建专辑与编辑专辑的表单中存在一个问题:我们没有进行任何验证.字段的内容可以不输入,或者在价格的字段中输入一些字符,在执行程序的时候,这些错误会导致数据库保存过程中出现错误,我们将会看到来自数 ...
- postman接口案例
接口测试 什么是接口(API) API全称Application Programming Interface,这里面我们其实不用去关注AP,只需要I上就可以.一个API就是一个Interface.我们 ...
- CNN 和RNN 中input 长度不一致问题
转自:https://www.jianshu.com/p/86d667ee3c62,感谢分享! pad_sequences & Masking layer 上面提到,文本数据也可以用CNN来处 ...
- Microsoft Fluent Design System
转载自:http://www.ui.cn/detail/131217.html 就在刚刚举办的 Microsoft Build 2017 中,微软对外公布了它们最新的设计语言--"Fluen ...
- lucene4.6版本配置
1.官网下载lucene的最新版本,解压后会看到很多文件,我们现在需要: E:\lucene-4.6.0\demo\lucene-demo-4.6.0.jar; E:\lucene-4.6.0\cor ...
- WAKE-WIN10-SOFT-软件-Matlab配置及工具箱
1Matlab 1,1Matlab下载,安装,配置,,, 1,2 2工具箱 2,1LibSVM 必应:https://www.bing.com/search?q=libsvm&qs=n& ...
- 批量生成DDL脚本
获取用户下所有索引脚本,用于数据迁移后重建索引: set pagesize 0set long 90000set feedback offset echo offspool get_index_ddl ...