内容说明

  • 一项课程作业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监控项目思考的更多相关文章

  1. 项目总结22:Java UDP Socket数据的发送和接收

    项目总结22:Java UDP Socket数据的发送和接收 1-先上demo 客户端(发送数据) package com.hs.pretest.udp; import java.io.IOExcep ...

  2. zookeeper编程入门系列之zookeeper实现分布式进程监控和分布式共享锁(图文详解)

    本博文的主要内容有 一.zookeeper编程入门系列之利用zookeeper的临时节点的特性来监控程序是否还在运行   二.zookeeper编程入门系列之zookeeper实现分布式进程监控 三. ...

  3. 分布式链路监控与追踪系统Zipkin

    1.分布式链路监控与追踪产生背景2.SpringCloud Sleuth + Zipkin3.分布式服务追踪实现原理4.搭建Zipkin服务追踪系统5.搭建Zipkin集成RabbitMQ异步传输6. ...

  4. java swing+socket实现多人聊天程序

    swing+socket实现多人聊天程序 1.准备工作 先看效果: 客户端项目结构图: 服务端项目结构图: 2.运行原理 服务端 先开一个线程serverListerner,线程中开启一个Server ...

  5. java基于socket公共聊天室的实现

    项目:一个公共聊天室功能的实现,实现了登录聊天,保存聊天记录等功能. 一.实现代码 1.客户端 ChatClient.java import java.io.BufferedReader; impor ...

  6. Java分布式开发

    分布式概念的引入是基于性能的提升,应用的可靠性而提出的.所谓Java分布式,即是在使用Java语言进行企业级应用开发的过程中,采用分布式技术解决业务逻辑的高并发.高可用性的一些架构设计方案. 1. R ...

  7. 5个强大的Java分布式缓存框架推荐

    在开发中大型Java软件项目时,很多Java架构师都会遇到数据库读写瓶颈,如果你在系统架构时并没有将缓存策略考虑进去,或者并没有选择更优的 缓存策略,那么到时候重构起来将会是一个噩梦.本文主要是分享了 ...

  8. Flex通信-与Java实现Socket通信实例

    Flex通信-与Java实现Socket通信实例  转自:http://blessht.iteye.com/blog/1136888 博客分类: Flex 环境准备 [服务器端] JDK1.6,“ja ...

  9. 转: 透过CAT,来看分布式实时监控系统的设计与实现

    评注: 开源的分布式监控系统 转:http://www.infoq.com/cn/articles/distributed-real-time-monitoring-and-control-syste ...

随机推荐

  1. iOS UITableViewCell 中 调整imageView 的图片大小

    在我的项目中,很多地方都希望将UITableViewCell 中的imageView 能根据自己图片的大小来进行展示,而就为了解决这个问题又觉得重写UITableViewCell 很不值得. 如下: ...

  2. sqoop的增量导入(increment import)

    1.import增量导入的官方说明

  3. 2014年4月底至5月初51Aspx源码发布详情

    精灵豆会员管理系统源码  2014-4-21 [VS2010]功能介绍:精灵豆会员管理系统业务管理平台采用微软选进的C#语言开发,采用大型数据库,具有比较高的执行效率和高安全性.系统分为消费管理,会员 ...

  4. Objective-C学习笔记-第一天(1)

    .h头文件,用于声明一些公开的属性.方法.头文件一般不会放太多的东西,没必要暴露太多接口,私有和封装. .m主文件,用于实现.h文件中的方法,以及一些其它的方法. -(返回值)方法名参数1名称:(参数 ...

  5. Python OpenCV —— bitwise

    关于图像的位操作,目的是为了将一个logo覆盖到另一个图片上. # -*- coding: utf-8 -*- """ Created on Wed Sep 28 20: ...

  6. Windows Squid 安装配置

    squid 可以做反向代理将系统中相对静态的页面进行缓存和负责均衡,提高网站访问速度,增强网站可用性.安全性.用户访问Squid 反向代理服务器的 IP 地址,这样客户端的 URL 请求将被发送到反向 ...

  7. WPA破解原理简要——无线网络破解续

    一.破解密码的基础 关于密码的破解我再重复一次好了.密码破解就两大类方法.一是字典解密,而是暴力解密. 暴力解密就是采用穷举的方法——你密码是怎么组成的呢?无非就是数字.字母.符号,暴力解密就是采用一 ...

  8. AFX_MANAGE_STATE(AfxGetStaticModuleState())DLL导出函数包含MFC资源

    AFX_MANAGE_STATE(AfxGetStaticModuleState()) 先看一个例子: .创建一个动态链接到MFC DLL的规则DLL,其内部包含一个对话框资源.指定该对话框ID如下: ...

  9. How to relocate tablespace directory

    I’ll demonstrate how to relocate a tablespace directory without the reconstruction of databases. I h ...

  10. Spring webapp - shutting down threads on Application stop

    显示使用线程池Executors,必须执行 pool.shutdown() 否则会存在线程池泄露: http://stackoverflow.com/questions/22650569/spring ...