1 Star 0 Fork 0

guoquan.huang/DistSocketServer

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

DistSocketServer

一个多线程socket作业

实验目的与计划

  1. 熟悉分布式系统与分布式计算原理;
  2. 通过java编程实践,了解服务器间的通信原理,以及并发情况下资源管理方法;
  3. 通过调研,了解软件设计和软件工程的相关方法,其中包括面向对象建模方法,设计模式,单元测试方法等;

功能需求

作业基本要求:使用Client/Server架构,设计和实现一个多线程字典服务器,能够将让并发的client从Server中查询单词、新增单词、删除单词和修改单词;系统的实现必须基于两个最基本技术(最底层最抽象的网络通信和并发控制技术):Java Socket和Java Thread;不能用其他序列化工具如:RMI、JMS;

系统设计

系统模型

#本实验使用C/S的系统架构,其中有一个字典Server启动等待一个或多个Client访问操作,如下图:

image1

安全模型

#因为在该实验的C/S架构中,进程的通信是通过TCP协议对传输信息进行封装,如果在通信的过程中不使用密文通信的话,是可以通过抓包软件(如Wireshark)对TCP报文结构的数据部分进行偷取。所以本实验中,基于java socket通信中使用DES对称加密方法对发送的信息进行加密通信,具有一定的安全性。其中TCP协议结构图、加密流程图等如下:

image1

image1

image1

线程模型

#在本实验的实践中,服务器端Socket面对每一个新接入的客户端Socket的时候会出现资源共享问题,那么需要对应的并发控制方法:线程模型设计,线程安全设计。在面对每一个client接入的请求中使用Worker-pool模型(如下图);其中线程模型设计在本实验中是使用JUI的线程池(Executors.newFixedThreadPool方法),默认一开始设定有限个线程的线程池给予新接入的client使用。使用线程池有以下好处,从而提高系统的吞吐量: 1、计算机资源有限,不能无限开线程给新接入的client使用; 2、线程的创建和销毁开销较大,设定一些已建立的线程在线程池中给client重用可以提高系统效率; 3、有相关的管理方法对线程池进行同一管理:如分配算法、监控方法等 如果多个线程对一个资源进行读写会出现线程安全问题,如:丢失修改、读“脏数据”,不可重复读等。在线程安全设计中,本实验使用单例模式+同步操作。首先为客户端服务器设计一个接口处理器(DictHandler.java),该类是单例模式,在整个server的声明周期中只能只能创建一个, 其方法是加上synchronized,只能一个线程对其进行访问操作,其他线程则等待,所以是线程安全的。 除此之外,本实验中在业务层也加入了对象线程池(apache common pool2),面对多个对象的创建可以更节省系统资源(DictHandlerPool.java)。

image1

日志模型

#本实验添加一个日志操作记录功能,任意的client接入server的所有请求都需要记录在系统中,记录信息包括(IP地址、端口号、请求接口、请求参数、请求结果)。其中使用AOP面向切面编程实现该日志功能:AOP则提供了一个名叫“横切”的技术,把影响多个类的公共行为封装到一个可重用的模块,并将其命名为“Aspect”,即“切面”。“切面”的用途把那些与业务无关,但被业务模块共同调用的程序和模块封装起来,提供一个公共模块,从而降低不同业务模块的耦合度,提高业务的可操作性和可维护性。横切关注点的主要业务如“权限认证”、“日志”、“事务”等。其中本实验将optLogSave抽象成AOP,如下图:

image1

交互和存储模型

#因为本实验没有使用数据库存储字典数据和操作日志数据,选择以XML格式(dom4j)将数据存储在磁盘文件系统上;socket的通信数据格式则是使用json格式(fastjson)封装,再加密进行交互;

image1

程序设计

#分层编码包括:持久层、服务层、接口层、驱动层,单元测试等具体查阅代码; image1

系统测试部署

#略

总结

#本实验是简单多线程Socket通信实验,其中的设计包括: (1)线程模型使用woker-pool模型;线程安全控制使用单例模式+同步锁; (2)Socket通信为了提高安全性使用DES加密对TCP的数据报文部分加密; (3)使用JSON封装request和response再进行传输;使用XML格式对数据进行持久化操作; (4)新增一个操作日志记录功能,使用AOP面向切面编程思想实现;

空文件

简介

一个多线程socket作业 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/huang-guoquan-123456654321/dist-socket-server.git
git@gitee.com:huang-guoquan-123456654321/dist-socket-server.git
huang-guoquan-123456654321
dist-socket-server
DistSocketServer
master

搜索帮助

Cb406eda 1850385 E526c682 1850385