来,牛皮需要吹起,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. opencv2.4.10+VS2012配置问题

    opencv2.4.10+VS2012配置 作为opencv的初学者,第一个难题想必都一样,如何配置opencv+VS的环境呢?在网上的教程,铺天盖地,但我仍然是尝试了十几次才找到属于自己的那套配置方 ...

  2. 网站部署中遇到的问题-网页中js,css和图片资源无法加载

    问题描述: 打开的网页跑版,图片无法加载,用控制台调试发现css和js都没有加载. 原因: 没有启用IIS"静态内容". 解决方法: 设置"打开或关闭windows功能& ...

  3. Thrift笔记(四)--Thrift client源码分析

    thrift文件 namespace java com.gxf.demo namespace py tutorial typedef i32 int // We can use typedef to ...

  4. js之strict模式

    JavaScript在设计之初,为了方便初学者学习,并不强制要求用var申明变量.这个设计错误带来了严重的后果:如果一个变量没有通过var申明就被使用,那么该变量就自动被申明为全局变量: i = 10 ...

  5. 前端框架——Bootstrap

    一.Bootstrap介绍 凡是使用过bootstrap的开发者,不外乎做这么两件事情:复制and粘贴. Bootstrap官方网址:http://www.bootcss.com Bootstrap, ...

  6. Django组件——分页器(paginator)

    一.视图层 from django.shortcuts import render # Create your views here. from .models import Book from dj ...

  7. 【代码笔记】Java深入学习——实现客户端发送文件到服务器的文件传输

    Server.java package com.huaxin.lesson02; import java.io.FileOutputStream; import java.io.InputStream ...

  8. H5前端的行业知识

    今天咱们不说代码!咱们说点行内的只是吧!! 一.前端基本技能: 会点设计,不要求精湛,处理图片,设计个小广告是要的: 精通HTML+CSS,并能快速处理各浏览器兼容问题: 熟练掌握Javascript ...

  9. SharePoint 2013 - Client OM

    1. 向 executeQueryAsync 中传递参数可以使用以下两种方式,也可以参考这篇文章: var mySuccessCallBack = Function.createCallback(on ...

  10. Linux中怎么从root用户切换到普通用户

    su是在用户间切换,可以是从普通用户切换到root用户, test@ubuntu:~$ su Password:  root@ubuntu:/home/test# 也可以是从root用户切换到普通用户 ...