Java分布式Socket监控项目思考
内容说明
- 一项课程作业Java编写Socket长连接监控分布式终端,并将终端状态写入数据库供前端查询
基础:c++/Posix/APUE/Mysql&sqlite
核心内容:Socket/线程/并发/同步
难点:Java语言未系统学习过,Java中JDBC操作数据库未接触过
- 过程:
- 心跳包程序理解重写:
- 问题与技能:java语言面向对象,Java语言的Socket使用,Java异常基本使用
- 解决方法:
- 熟悉一下Java语法,套用c++面向对象方法(其实面向对象部分基本一样,包括Python的面向对象)
- 抄代码,理解代码逻辑,(相信每一个关键词,每一行代码都有其意义和功能)学习新语言新工具最快的方式就是使用它
- 就遇到问题集中问题点查询,避免盲目查询,一次解决一个Bug,多用Google和Stackoverflow(超级高效)
- Server端处理
- WatchDog监视新连接
- 多线程处理各连接内部报文,超时未收到报文,清除连接释放资源
- 加入机器状态协议消息标识
- 考虑了多种通信状况的可能,终于理解TCP/IP为什么设计那么多头部和校验了
- 本地Hashmap缓存消息较少数据库读写次数
- 设计之初没考虑状态包对数据库的高频读写更新,后来为了减少数据库读写在本地建立一个最新状态缓存即Hashmap映射集,一般尽量只更新本地状态缓存即Hashmap,必要时读写数据库
- hashmap可能不是很好的实现,健壮性欠考虑,考虑用Redis或者sqlite作为本地缓存数据库,效果应该会好些
- 数据库操作更新
- sql语句嵌入到Java语句中(JDBC),基本的增删改查,封装成了一个查询类
- 之前学过Mysql和sqlite的基本操作.在Java里是通过是所谓的JDBC(其实还是执行sql语句),这两天看了Python的数据库接口,发现都一样的执行sql语句
- 心跳包程序理解重写:
后记
- 好奇Java的线程实现和同步,之前看Posix和APUE的线程章节,一堆的Mutex和lock,感觉Java直接靠关键字synchronized 就搞定了(其实内部还是锁机制)
- 不管哪种语言
- Socket,一样的bind/connect
- 线程的同步,一样的加锁互斥等待同步资源共享
- 线程/进程通信,一样的写进一个"文件",给另一个进程读:信号/信号量(非典型读写),,共享文件/管道(典型读写)
Java分布式Socket监控项目思考的更多相关文章
- 项目总结22:Java UDP Socket数据的发送和接收
项目总结22:Java UDP Socket数据的发送和接收 1-先上demo 客户端(发送数据) package com.hs.pretest.udp; import java.io.IOExcep ...
- zookeeper编程入门系列之zookeeper实现分布式进程监控和分布式共享锁(图文详解)
本博文的主要内容有 一.zookeeper编程入门系列之利用zookeeper的临时节点的特性来监控程序是否还在运行 二.zookeeper编程入门系列之zookeeper实现分布式进程监控 三. ...
- 分布式链路监控与追踪系统Zipkin
1.分布式链路监控与追踪产生背景2.SpringCloud Sleuth + Zipkin3.分布式服务追踪实现原理4.搭建Zipkin服务追踪系统5.搭建Zipkin集成RabbitMQ异步传输6. ...
- java swing+socket实现多人聊天程序
swing+socket实现多人聊天程序 1.准备工作 先看效果: 客户端项目结构图: 服务端项目结构图: 2.运行原理 服务端 先开一个线程serverListerner,线程中开启一个Server ...
- java基于socket公共聊天室的实现
项目:一个公共聊天室功能的实现,实现了登录聊天,保存聊天记录等功能. 一.实现代码 1.客户端 ChatClient.java import java.io.BufferedReader; impor ...
- Java分布式开发
分布式概念的引入是基于性能的提升,应用的可靠性而提出的.所谓Java分布式,即是在使用Java语言进行企业级应用开发的过程中,采用分布式技术解决业务逻辑的高并发.高可用性的一些架构设计方案. 1. R ...
- 5个强大的Java分布式缓存框架推荐
在开发中大型Java软件项目时,很多Java架构师都会遇到数据库读写瓶颈,如果你在系统架构时并没有将缓存策略考虑进去,或者并没有选择更优的 缓存策略,那么到时候重构起来将会是一个噩梦.本文主要是分享了 ...
- Flex通信-与Java实现Socket通信实例
Flex通信-与Java实现Socket通信实例 转自:http://blessht.iteye.com/blog/1136888 博客分类: Flex 环境准备 [服务器端] JDK1.6,“ja ...
- 转: 透过CAT,来看分布式实时监控系统的设计与实现
评注: 开源的分布式监控系统 转:http://www.infoq.com/cn/articles/distributed-real-time-monitoring-and-control-syste ...
随机推荐
- HBase with MapReduce (Read and Write)
上面一篇文章仅仅是介绍如何通过mapReduce来对HBase进行读的过程,下面将要介绍的是利用mapreduce进行读写的过程,前面我们已经知道map实际上是读过程,reduce是写的过程,然而ma ...
- javascript高级教程:如何优化javascript代码性能
在web前端开发中,为实现一些动态效果,减小页面大小,我们一般都会使用JavaScript技术来进行相关设置.但是初学者在编写JavaScript代码的时候,往往都是比较低质的代码,那如何才能提高Ja ...
- scanf()读取带空格的字符串
#include <stdio.h> int main() { char str[128]; scanf( "%[^\n]", str ); printf( " ...
- tornado autoreload 模式
在用tornado进行 网络程序编写的时候,肯定要对代码进行修修改改,如果每次都要重启server的话,会是很麻烦的事情.tornado提供了autoreload模式. 一,要开始autoreload ...
- Oracle数据库习题
以下习题都已Oracle数据库中默认表为主体 1.列出至少有一个员工的所有部门. SELECT DISTINCT D.DNAME FROM EMP E,DEPT D WHERE E.DEPTNO=D. ...
- 数据库使用fmdb
#import "SQLdataManger.h" #import "FMDatabaseAdditions.h" static SQLdataManger * ...
- 《JavaScript模式》第5章 对象创建模式
@by Ruth92(转载请注明出处) 第5章:对象创建模式 JavaScript 是一种简洁明了的语言,并没有其他语言中经常使用的一些特殊语法特征,如 命名空间.模块.包.私有属性 以及 静态成员 ...
- 如何让LinearLayout也有类似Button的点击效果?
有的时候,我们希望LinearLayout布局也有点击的效果,这时候我们不仅需要一个作为背景的selector,还要设置一些其它属性才行: android:clickable="true&q ...
- LintCode Binary Tree Inorder Traversal
Binary Tree Inorder Traversal Given a binary tree, return the inorder traversal of its nodes' values ...
- Android double输出时保留两位小数
方法1,在代码中操作 this.totalTextview = (TextView) findViewById(R.id.package_total_money); double decimalBal ...