最近研究下java语言,根据一般使用的情况,写了个连接通讯服务的框架;

框架结构 C-Manager-S;

把所有通讯内容抽取成三个方法接口:GetData,SetData,带返还的Get;

所有数据都处理为byte[];客户端与服务端和管理器以及服务端有多重处理模式

管理信息:

1.不需要中心管理器;服务端启动时向客户端广播自己绑定的地址;接收数据;客户端使用时广播一次请求,向所有服务端获取服务信息;

2.管理中心:客户端向管理器请求服务信息;服务端向管理器注册地址;根据需要,可以把客户端传递的数据直接转发给服务,也可以将地址转发给客户端,具体哪种由客户端需要决定

服务端:

1.服务端必须是命名的;整个结构以服务名称为准;所有请求也以名称为准;

2.服务端具有相同名称时;根据服务配置;将服务分为主从模式和负载均衡模式;如果是主从模式,则管理器或者客户端只调用主服务,当判断主服务死掉才会启用从服务;多个从服务时按照产生的序列依次启用(也会按照时间,其实是参考了zookeeper中的选举算法);如果是负载均衡模式(没有设置服务是主从模式则是负载均衡),负载均衡采用Hash一致算法,抽取服务使用;

客户端:

客户端直接封装为一个代理接口,又内部转换,只需要调用接口方法,传入服务名称,返回一个代理接口,然后传送数据

信息缓存:

采用了多个本地数据库(关系型,非关系型,内存数据库,都是本地化的);

传输层:

传输层现在只提供了最基本的TCP,UDP;我把通讯层高度抽取,抽取为接口,通过一个通讯管理器来创建接口对象(反射),只需要传入一个名称(“TCP”,"UDP")来建立通讯,方便修改,可以很灵活的修改通讯方式,也可以替换熟悉的第三方通讯;大家可以自己开发自己的通讯层,只需要实现接口,给该通讯取一个名称即可

做了一个简单的管理器界面如图:

该框架中有一个序列化组件:magpack;另外就是本地化数据库

现在网络上的框架组件都比较复杂比较大,比如:zookeeper;其实我们很多都是中小企业或者是小数据运用,没有必要那么复杂庞大,也不一定好维护,我只是想弄一个易用,通用,很小,很快的东西,简化通讯处理,高度抽象;

另外就是所有网络组件都是选择处理快,简单的,尤其是免费开源;设计的时候考虑这些组件易更换,尽量不去复杂引用,尽可能抽象接口;

另外准备了一个加载更多的界面:

Java的界面当前不适合复杂开发,只是准备简单的显示

已经将代码提交到了github;

框架功能将逐步更新,可能完善以后也会庞大,基于设计目标,在使用中会尽量模块化,可以分离使用(比如只使用封装的数据库连接池,数据库操作,通讯层,代理转换这些);或通过配置,反射,接口分离代码;

现在主要是JAVA语言实现,其实所有语言都一样;

最后一点:很多人在部署时害怕中心节点,因为它挂了就一切完蛋。这里的服务端可以有多种模式;至于管理器,它更加类似DNS解析地址,DNS都挂了,大家都没有玩的了;不过可以讨论有没有其它方式,我考虑到用多个,内部替换(类似用zookeeper选举一个中心的中心管理服务,然后切换),有懂通讯或者地址解析的多多提意见;

下一步完善可能添加的技术UDP挖洞;

一个简单的通讯服务框架(大家发表意见一起研究)JAVA版本的更多相关文章

  1. 让techempower帮你通讯服务框架的性能

    在编写服务应用框架的时候一般都需要进行性能测试,但自己测试毕竟资源受限所以很难做更高性能上的测试.其实GitHub上有一个项目可以让开发人员提交自己的框架服务代码然后进行一个标准测试:现在已经有上百个 ...

  2. gRPC初探——概念介绍以及如何构建一个简单的gRPC服务

    目录 引言 1. gRPC简介 2. 使用Protocol Buffers进行服务定义 2.1 定义消息 2.2 定义服务接口 3.构建简单的gRPC服务 3.1 编写proto文件,定义消息和接口 ...

  3. laravel学习:php写一个简单的ioc服务管理容器

    php写一个简单的ioc服务管理容器 原创: 陈晨 CoderStory 2018-01-14 最近学习laravel框架,了解到laravel核心是一个大容器,这个容器负责几乎所有服务组件的实例化以 ...

  4. 超详细,新手都能看懂 !使用SpringBoot+Dubbo 搭建一个简单的分布式服务

    来自:JavaGuide Github 地址:https://github.com/Snailclimb/springboot-integration-examples 目录: 使用 SpringBo ...

  5. Node.js简单介绍并实现一个简单的Web MVC框架

    编号:1018时间:2016年6月13日16:06:41功能:Node.js简单介绍并实现一个简单的Web MVC框架URL :https://cnodejs.org/topic/4f16442cca ...

  6. [WCF REST] 一个简单的REST服务实例

    Get:http://www.cnblogs.com/artech/archive/2012/02/04/wcf-rest-sample.html [01] 一个简单的REST服务实例 [02] We ...

  7. linux系统下开启一个简单的web服务

    linux 下开启一个简单的web服务: 首先需要linux下安装nodejs 然后创建一个test.js:   vi test.js var http =require("http&quo ...

  8. node创建一个简单的web服务

    本文将如何用node创建一个简单的web服务,过程也很简单呢~ 开始之前要先安装node.js 1.创建一个最简单的服务 // server.js const http = require('http ...

  9. 基于gin框架搭建的一个简单的web服务

    刚把go编程基础知识学习完了,学习的时间很短,可能还有的没有完全吸收.不过还是在项目中发现知识,然后在去回顾已学的知识,现在利用gin这个web框架做一个简单的CRUD操作. 1.Go Web框架的技 ...

随机推荐

  1. 如何使用require.js?

    最近几天在学习一个javascript库require.js,也看了一些相关的教学视频,这里推荐一下幕课网阿当老师的<阿当大话西游之Web组件>的教学视频,一整套看下来,参照视频里面的de ...

  2. fiddler抓取用tomcat来部署的项目接口请求包

    Fiddler 是以代理web服务器的形式工作的,它使用代理地址:127.0.0.1,端口:8888. 当Fiddler退出的时候它会自动注销, 这样就不会影响别的程序.关于fiddler这个工具的使 ...

  3. day35-python 操作memcache二

    Memcache常用命令 存储命令: set/add/replace/append/prepend/cas 获取命令: get/gets 其他命令: delete/stats.. add方法 添加一条 ...

  4. Forth相关IO操作

    body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...

  5. vue项目目录结构

    VUE项目目录结构 如上图所示,我们的目录结构就是这样的了. 目录/文件 说明 build 这个是我们最终发布的时候会把代码发布在这里,在开发阶段,我们基本不用管. config 配置目录,默认配置没 ...

  6. VSTO:使用C#开发Excel、Word【16】

    使用工作表对象Worksheet对象表示Excel工作簿中的工作表.Worksheet有一个Name属性,返回工作表的名称(例如“Sheet1”). 工作表管理Worksheet对象具有一个Index ...

  7. Git 与SVN

    SVN 是集中式版本控制系统: 先说集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给 ...

  8. idea护眼设置

    idea护眼设置 看了很多intelliJ IDEA的配置文章,不知道大家为什么都不约而同的选择了黑色的那个主题,是很有感觉,很有程序猿的范.但是个人感觉对眼睛不太好,所以我还是用正常的框,建议大家把 ...

  9. 3070 Fibonacci

    Fibonacci Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 21048   Accepted: 14416 Descr ...

  10. 用vs2008打开vs2005项目

    1 使用记事本打开*.sln解决方案文件,将Visual Studio 2005改为Visual Studio 2008 将版本号改为9.00 2 打开扩展名为*.csproj的项目文件,在Defau ...