学习任何一个稍有难度的技术,要对其有充分理性的分析,之后果断做出决定---->也就是人们常说的“多谋善断";本系列虽然涉及的是socket相关的知识,但学习之前,更想和广大程序员分享的是一种心境:学习是一个循序渐进的过程,心态应该随时调节,保持戒骄戒躁的状态。比如最近在看网易公开课MIT《算法导论》,老师提到,学习算法之前要计算机数学+离散数学+概率论等课程的知识,所以一直学不好算法的程序员不妨从基础入手,这都是中国式教育惹的祸啊!(此处省略一万字......)
原文地址:Building a Java chart server[1]
项目源码:Socket_Chat
在本篇教程中,我们会创建一个包含服务端和客户端简单的聊天室系统。本篇适合有一些网络编程经验或者没有的初学者(大牛请掠过)。即使你有一些关于网络方面的编程经验或者没有,我们仍会讲述网络、多线程等知识的详细细节,以便大家能充分理解本教程。
—————————————————————————————————————————————————————————————————————————
在本篇教程中,你会创建一个简单、集中管理,面向连接的Java服务端。在做此事的过程中,你会学习到一些基本的框架知识,使用经过实践验证过的技术,用于创建类似的服务端,这样你的服务端会在多种状况下都会表现良好。我们也会检查该框架的缺陷,继续探索相关的事。
—————————————————————————————————————————————————————————————————————————
一般来说,任何服务端的工作时提供一种集中的服务。然而,有很多不同的服务方式和很多不同通信结构方式。(我们该怎么对待呢?)
聊天室大体上描述了面向连接的服务,因为一个用户建立并保持一个连接,在会话期间发送接收信息。
这是和Web不同的,Web的协议(至少理论上)是基于事务的 -- 浏览器请求一个页面,服务器返回给它;然后连接关闭。(事实上,连接保持打开和可重用的状态,但是这是个更倾向于速度优化而不是结构的比方)
我们会创建一个简约,面向连接的服务端。学习基本的框架可以帮助你在将创建出更好的面向连接的服务端。
—————————————————————————————————————————————————————————————————————————
创建这个原始服务端过程中,我们会使用每个实现Java的基本包。这就允许我们在Java语言中,探索服务端编程的每个在最底层。
当然有很多关注这些网络细节可用的系统。在许多系统中,最好的实际解决方案是使用一个已有的框架,由于它经常提供有用的功能,例如可容错性,负载均衡和可通话行。
尽管如此,理解框架如何工作的关键在于最底层(原理)。没有一个现存的解决方案完美解决所有问题,现存的解决方案经常会有小瑕疵,而你必须和它相伴。用批判性的眼光,权衡各种技术的本质的素质,选择正确的预包装方案。
—————————————————————————————————————————————————————————————————————————
“framework”这个词在面向对象社区里有一个技术性的定义 -- 一种可重用的设计架构。
这个传统的代码复用不同,写一些代码为了一个目的被另一个目的重用(或者没有特殊的意图)。更准确的说,一个框架是可重用,可以实现在特殊程序中的首要结构。
一种在framework和传统的代码复用之间的想法是,传统的重用讲述了在你的特殊架构中插入预先存在的组件,而一个framework则说明了在预先存在的架构中插入特殊的组件。
我们在本篇教程中的代码不是技术架构,因为它还不足以你简单的重用在其他别的项目中。构建上述的架构脱离了本教程的目的,你需要深入探索服务端编程基础技术。
然而,在设计层面上,它是一个架构,因为该框架的代码会被一次又一次的使用。
—————————————————————————————————————————————————————————————————————————
本篇教程使用的架构有7个功能点。只有你完成本教程,你才会熟悉这7个功能点,当你创建你自己的面向连接的服务端时,你就可以重新使用它们。
7个功能点列表:
- 监听类
- 接收循环
- 线程类
- 读写循环(服务端)
- 去除死链接
- 客户端类
- 读写循环(客户端)
第一篇让大家对系统有一个总体的认识,从某个知识点讲解到系统功能列表,足以吸引每个程序员。
[2]. Java sockets 101以及中文系列 JAVA套接字(Socket)101
[3]. Java socket通信基本原理介绍
[Java聊天室服务器]实战之一 开篇介绍,布布扣,bubuko.com
原文:http://blog.csdn.net/jptiancai/article/details/25170983