最近研究下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. css3的transform-origin配合scale,控制动画,实现各种hover效果

    1.底部画线,从左边开始,右边结束 html: <div class="silde-txt">底部划线</div> css: <style>.s ...

  2. Linux c 获取cpu使用率

    部分代码改编自来自http://blog.csdn.net/primeprime/article/details/41458731 主要的原理就是获取top -n 1 | grep Cpu执行的结果, ...

  3. windows下《Go Web编程》之Go命令

    Go命令: go build 用于编译代码,默认会编译当前目录下的所以go文件.若只需编译某个文件,go build后加上文件名,如go build a.go. go build会忽略目录下以“_”或 ...

  4. 告诉你们!我是怎么与Linux系统接触的!

    最开始接触Linux是在15年来北京后,刚来北京机缘巧合,从事了实施工程师的工作.实施工作是一个面很广的工作.业务.技术.沟通等等方方面面的.技术一直是我是的短板.刚开始,公司在要在阿里云上部署APP ...

  5. jmeter解决request response中文乱码问题

    一:主要内容 解决request请求入参中文乱码问题 解决response响应数据中文乱码问题 二:解决request和response中文乱码问题 request结果:-中文已经不乱码了 respo ...

  6. Django学习教程

    教程link:https://code.ziqiangxuetang.com/django/django-install.html 最好用虚拟环境学习django,用pycharm时要注意所选的pyt ...

  7. Linux安装64位Mysql5.7

    首先下载mysql 地址:https://dev.mysql.com/downloads/mysql/ 下载社区版mysql 下载完成后:ftp上传到服务器 /user/local/目录下,这个自己定 ...

  8. java基础知识点学习

    基础学习总结 1.锁sync/lock都有哪些方法,底层实现 synchronized ['sɪŋkrənaɪzd] 2.线程池的参数.线程池执行的流程,当到达线程池到达最大数,队列也满了,出现的异常 ...

  9. 测试同学必备抓包工具--charles之安装

    1,下载charles,官网:https://www.charlesproxy.com/ 2,下载完成,先试着用一下,网址访问百度看看... 注意,windows proxy如果勾选,则代表可以抓取网 ...

  10. IIC_slaver 的仿真之路

    IIC_slaver 是网上下载的.testbench文件是自带的,出现如图错误. compile  >> compile  option  >> include direct ...