最近研究下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. linux c使用socket进行http 通信,并接收任意大小的http响应(五)

    http.c data2.c http_url.c http.h data2.h http_url.h主要实现的功能是通过URL结构体来实现HTTP通信,你可以把这三个文件独立出来,作为HTTP通信模 ...

  2. Python *Mix_w6

    is 和 == 小数据池 python中有两个数据类型存在小数据池:数字int范围 -5 ~ 256 字符串中如果有特殊字符+ - * / @ 等等,他们的内存地址就可能不一样 字符串中单个*20以内 ...

  3. windows Jenkins git 配置

    待更新 插件下载地址:http://updates.jenkins-ci.org/download/plugins/ 参考地址:https://blog.csdn.net/zzy1078689276/ ...

  4. [Ajax] 如何使用Ajax传递多个复选框的值

    HTML+JavaScript代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8" ...

  5. Linux系统-tcpdump常用抓包命令

    主要语法 过滤主机/IP: tcpdump -i eth1 host 172.16.7.206 抓取所有经过网卡1,目的IP为172.16.7.206的网络数据 过滤端口:  tcpdump -i e ...

  6. java学习笔记41(数据库连接池 C3p0连接池)

    在之前的学习中,我们发现,我们需要频繁的创建连接对象,用完之后还需要在关闭资源,因为这些连接对象都是占资源的,但是又不得不创建,比较繁琐,为了解决这种情况,Java出现了数据库连接池: 数据库连接池的 ...

  7. 在 Linux 平台及 IPv4 环境中构建 IPv6局域网 测试环境

    在 Linux 平台及 IPv4 环境中构建 IPv6 测试环境 1 IPv6简介 IPv6(Internet Protocol Version 6)作为 IPv4 的升级版本,它是作为一共软件升级安 ...

  8. 【数据库(一)】SQL语言-表定义、查询

    基本模式定义+ SQL支持许多不同的完整性约束. not null, 在该属性上不允许空值 primary key 是否是是主码,主码必须非空且唯一 foreign key check(P),P是谓词 ...

  9. nodeJS文件操作

    让前端觉得如获神器的不是NodeJS能做网络编程,而是NodeJS能够操作文件.小至文件查找,大至代码编译,几乎没有一个前端工具不操作文件.换个角度讲,几乎也只需要一些数据处理逻辑,再加上一些文件操作 ...

  10. Mad LIbs小游戏

    c1=input('请输入摄氏温度;') c2=float(c1)*9/5+32 print('摄氏温度转换成华氏温度是{}'.format(c2)) name1=input('请输入名字:') na ...