前言

学习任何一个稍有难度的技术,要对其有充分理性的分析,之后果断做出决定---->也就是人们常说的“多谋善断";本系列虽然涉及的是socket相关的知识,但学习之前,更想和广大程序员分享的是一种心境:学习是一个循序渐进的过程,心态应该随时调节,保持戒骄戒躁的状态。比如最近在看网易公开课MIT《算法导论》,老师提到,学习算法之前要计算机数学+离散数学+概率论等课程的知识,所以一直学不好算法的程序员不妨从基础入手,这都是中国式教育惹的祸啊!(此处省略一万字......)

原文地址:Building a Java chart server[1]

项目源码:Socket_Chat

目录

  • [Java聊天室服务器]实战之一 开篇介绍(已完成)
  • [Java聊天室服务器]实战之二 监听类(已完成)

    • [Java聊天室服务器]实战之三 接收循环(已完成)
    • [Java聊天室服务器]实战之四 线程类(已完成)
      • [Java聊天室服务器]实战之五 读写循环(服务端)(已完成)
      • [Java聊天室服务器]实战之六 去除死链接(已完成)
      • [Java聊天室服务器]实战之七 客户端类(已完成)
      • [Java聊天室服务器]实战之八 读写循环(客户端)(已完成)

正文

移除死连接

线程类的第二个地方引用的是主要靠近底部的服务端对象,那里我们去除已经关闭的连接。更准确的说,我们每一个线程类,一旦连接关闭,必须请求服务端移除,以便我们可以处理它。下面是代码:

// 因某种原因,连接会关闭,所以服务端会处理它server.removeConnection(socket);

每次连接关闭的时候通知服务端是很重要的,这样服务端可以从任何内部清单上移除连接,也不会浪费时间给不在连接的客户端发送消息。

—————————————————————————————————————————————————————————————————————————

清理的重要性

移除死连接这一步,鉴于它在是们七大功能点的指导位置,它是决定性的,因为人们第一次写服务单的时候都会经常忘记它。

如果程序员忘记这一步,他们会发现服务端一段时间内工作很正常。之后变得越来越慢,开始占用越来越多的内存。当看到服务的输出时,他们才看到以惊人的速度出现的异常。

发生的是围绕所有连接的服务端都已关闭,尝试着发送消息给自己,发现根本做不到。

让我们继续说你的服务端接受连接,平均上说,每5s一次。让我们更大的假设大约15分钟内平均的用户。

这就意味着平均上,你会得到180个用户,在任意的时刻。当时光流逝,许多用户会连接或者关闭连接,仍然平均会保持在180个。

24小时过后,17280个用户会连接你的服务器。在一天的最后,你仍然有180个活的连接,你会有大约17100个死掉的连接。如果你不关心移除掉死连接,那么你的服务端试着花费大部分的时间把失败写入这些连接中。(实际上,大部分时间可能会抛出异常给System.out!)

正是由于这个原因,这些死掉的连接被清除掉才是至关重要的。

—————————————————————————————————————————————————————————————————————————

结束语

在下一节中我们会提到客户端方面的知识。

参考文献

[1]. Building  a Java chart server

[2]. Java sockets 101以及中文系列 JAVA套接字(Socket)101

[3]. Java socket通信基本原理介绍

[Java聊天室服务器]实战之六 去除死链接相关推荐

  1. java聊天室持续监听,[Java聊天室server]实战之二 监听类

    前言 学习不论什么一个稍有难度的技术,要对其有充分理性的分析,之后果断做出决定---->也就是人们常说的"多谋善断":本系列尽管涉及的是socket相关的知识,但学习之前,更 ...

  2. java c s聊天程序_Java建立C/S 模式聊天室服务器和客户端

    时间:2018-12-01 概述:聊天室 服务器 客户端 在网络上经常进各种聊天室,本例通过编程实现了C/S 模式的聊天室服务器和客户端.实现方法:ChatServer 类实现了一个聊天室服务器端, ...

  3. [java聊天室]多个客户端与服务器说话多线程(二)

    多客户端链接 之前(java聊天室一)只有第一个连接的客户端可以与服务端说话. 原因: 服务端只调用过一次accept方法,因此只有第一个客户端链接时服务端接受了链接并返回了Socket,此时可以与其 ...

  4. 多人群聊聊天室java_#java 聊天室(一)—— 实现一个简单Telnet多人群聊聊天室...

    #java    聊天室(一)--  实现一个简单Telnet多人群聊聊天室 学习本文须要先准备的知识点:队列(或数组).类与对象.线程.InputStream和OutputStream的使用.jav ...

  5. 计算机html大作业聊天室,java大作业设计报告-JAVA聊天室.docx

    PAGE \* MERGEFORMAT18 JAVA程序设计 多人聊天室 设计目的 Java 编程语言是个简单.面向对象.分布式.解释性.健壮.安全与系统无关.可移植.高性能.多线程和静态的语言.本次 ...

  6. java聊天室(实训项目)

    这里是我们实训的一个关于java聊天室的项目,有需要的同学可以看看,私聊功能未完善. 话不多说,直接上代码. 服务器: package ChatRoom;import java.awt.Color; ...

  7. Java聊天室的设计与实现

    Java聊天室系统主要用于实现在线聊天,基本功能包括:服务端和客户端.本系统结构如下: (1)服务端: 1.能够开启和关闭服务器 2.等待着客户端从特殊端口发送的请求 3.监听的端口并不是固定的,服务 ...

  8. java聊天室论文,JAVA聊天室毕业论文

    JAVA聊天室毕业论文 毕业设毕业设计计 姓 名 学 号 系 部 信息工程系信息工程系 专 业 软件技术软件技术 设计题目 聊天室(聊天室(JavaJava)) 指导教师 职 称 2012 年 07 ...

  9. Java聊天室项目GUI界面化实现(Java聊天室 IO流 Socket流 GUI界面 )

    Java聊天室项目GUI界面化实现(Java聊天室 IO流 Socket流 GUI界面 ) 文章目录 Java聊天室项目GUI界面化实现(Java聊天室 IO流 Socket流 GUI界面 ) 1.J ...

  10. java 聊天室之 传送图片文字等功能的实现

    前几日写的一篇简陋之极的java聊天室被各位前辈说是,一塌糊涂,乌烟瘴气,只是简单的实现了需要的功能,并未做到人性化.在下痛定思痛,心想还是先学会显示功能再做美化界面,美化代码的打算! 在奋斗了一天之 ...

最新文章

  1. Yslow on Nodejs server
  2. 【星球知识卡片】残差网络家族10多个变种学习卡片,请收下!
  3. university of liverpool writing techniques
  4. 【RK3399Pro学习笔记】三、Debian 9 安装 ROS (Thinker Edge R)
  5. 查看zookeeper二进制日志方式
  6. 微软推出免费虚拟太空望远镜软件WWT
  7. Basler和Matrox的配置及调试
  8. android获取截屏图片大小,【Android】android获取长图截屏(显示之外的也要)
  9. WebSSH2和docker化
  10. 【高频内存与主板内存频率和CPU内存频率之间的关系】
  11. ffmpeg复杂滤镜-filter_complex
  12. 《Adobe Premiere Pro CS6中文版经典教程》——1.3 扩展工作流
  13. 图片转文字怎么弄?图文转换方式说明
  14. PNG warning: iCCP: known incorrect sRGB profile
  15. Byte的数值范围为何是-128到127
  16. ZYNQ-使用SD卡读写文本数据
  17. java regux_使用Unix命令在Java中打印Mac的序列号
  18. FPGA学习前导:FPGA/CPLD简介
  19. 如何扩大营销卖蜂蜜?
  20. idea中的Diagram功能,查看类图

热门文章

  1. sap 双计量单位_SAP 基本计量单位更改(转载)
  2. Detached InstanceError:Instance is not bound to a Session 关闭session后使用SQLAlchemy对象
  3. html5 日历 仿ios,一款完整的蓝白风格HTML5日历应用程序
  4. sap批量创建盘点凭证以及盘点凭证过账
  5. 关于alfa无线设备
  6. ubuntu18只进入安全模式_Ubuntu安装最佳实践(防踩坑指南)
  7. canvas绘制竖排的数字_小程序利用Canvas绘制图片和竖排文字
  8. Mac电脑没声音了怎么办?苹果电脑没声音的解决方法
  9. 才意识到自己“奇葩”的360,会不会有些晚?
  10. 计算机限制无法压缩,电脑上文件夹压缩不了怎么办