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 ...
随机推荐
- GFT_News Auto
using AnfleCrawler.Common; using Newtonsoft.Json.Linq; using System; using System.Collections.Generi ...
- Android 生成颜色器
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=&q ...
- 转:Caused by: java.lang.NoSuchMethodError: org.apache.log4j.Category.log
Caused by: java.lang.NoSuchMethodError: org.apache.log4j.Category.log出现的异常:java.lang.reflect.Invocat ...
- 隐匿在iOS文件系统中的隐私信息
说明: . 本文仅供安全学习及教学用途,提及的部分技术带有攻击性,请确保合法使用. . “这些都不是我干的,我就负责说出来.” . 图片仅供参考. . 本文所讨论的内容适用于iOS .4环境,其应用程 ...
- [转]设置Android手机以使用ARM Streamline进行性能分析(二)
原文因为arm社区改版访问不到了,原作者鲍方,原文地址,这篇是从google cache里挖出来的,希望能帮到要对cocos2dx优化的各位 Posted by Fang Bao, Leave C ...
- CentOS 6.5 安装CodeBlocks
CentOS 6.5 安装CodeBlocks 经历了无数痛苦的折磨,Linux上的库依赖真是能把人逼疯,终于在Google上找到了办法,勉强将CodeBlocks安装成功. 1.为了避免最新版本的C ...
- 不同vlan之间的相互访问
拓扑图: 用到的命令: 给端口的vlan <sw1>用户模式 切换到系统模式 system-view 交换机名称 sysname swj1 创建vlan 3 端口模式选择int g0/0/ ...
- [翻译]Understanding Weak References(理解弱引用)
原文 Understanding Weak References Posted by enicholas on May 4, 2006 at 5:06 PM PDT 译文 我面试的这几个人怎么这么渣啊 ...
- LintCode Singleton
Singleton 3 大要素: 1.有private static的句柄(成员变量即field) 2. constructor 必须为private 3.有public static的getInst ...
- 类似title的鼠标跟随事件
$(document).ready(function(){ // 创建一个div显示提示信息 var dropTitle = document.createElement("div" ...