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

前言

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


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

项目源码:Socket_Chat

目录

正文

移除死连接

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

// 因某种原因,连接会关闭,所以服务端会处理它
			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聊天室服务器]实战之六 去除死链接,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。