看到本比较简单的socket入门教材叫socket_chat,是用比较简单的英文写的,所以一时兴起翻译了一下。刚刚入门的朋友可以看一下。
原书是一本IBM的DevelopWorks的指南,26页。翻译后剩15页。翻的比较随便,看到错误的地方欢迎各位朋友指正。
谢谢大家。
开始了——
--------------------------------------------------------------------------------------
建造一个Java聊天服务器
自developerWorks(你的伟大指南的来源)
ibm.com/developerWorks
翻译:Childheart
目录
如果你在线浏览本文档,你可以点击任何一个主题直接链入那一节
1. 指南贴士
2. 简介
3. 先说首要的
4. While-Accept 循环(服务器端)
5. Per-Thread 类
6. While-Read/Write循环(服务器端)
7. 移除死连接
8. 客户端类
9. While-Read/Write 循环(客户端)
10. 局限性
11. 总结
12. 附录:源代码
1.指南贴士
我应该用这个指南吗?
在本指南里,我们将创建一个简单的聊天系统的服务器端和客户端。本指南适合对网络编程有很少或没有经验的读者。我们将足够详细的论及网络和多线程,从而你能跟上这些例子——即便你在这方面的编程经验很少或者没有。当然,你需要熟悉基本的面向对象的Java编程。
如何浏览
在本指南在浏览很简单:
选择“下一页”和“前一页”来在本指南中前后移动。
当你看完了一节,选择下一节。你可以通过“主菜单”和“节菜单”来浏览本指南。
如果你想告知我们你的想法,或者你对作者有关于本指南内容的疑问,使用“反馈”按钮。
获得帮助
如果有关于本指南的问题,联系作者:Greg Travis,mito@panix.com
Grey Travis 是一个自由程序员,居住在纽约市。他对于电脑的兴趣可以追溯到《生化女郎》的一个片段:Jamie试图从一个灯和门都被邪恶的人工智能控制的建筑中逃掉,它通过扬声器嘲笑她。Greg坚信,这完全符合电脑程序工作时的情形。
2.简介
你将学到什么
在本指南中,你将创建一个简单的,中心的,面向连接的Java服务器。通过做这个,你将学习一个基础的框架,你在创建这样的一个服务器中可以用到它,历史悠久的技术在很多情况下工作的很好。我们也将考查该框架的一些局限,并探究绕过它们的方法。
什么是“面向连接”的服务器
一般说来,任何服务器的工作都是提供一个中心的服务。然而,提供服务的方式有多种,通讯的架构方式也有多种。
聊天被粗糙的描述成面向连接的服务,因为一个用户建立一个连接并保持该连接,在会话期间发送并接收文本。
这跟网站形成对比,网站的协议是(至少在理论上是)互相影响的——浏览器请求一个页面,然后服务器发送给它;接着连接关闭了。(实际上,连接是保持开放和重用的,但相对架构的含义,这更是一个速度优化。
我们将创建一个剥露的,面向连接的服务器。学习这个基本的框架,将非常有助于你在未来创建其他面向连接的服务器。
为什么从底稿开始?
在创建这个原子型的服务器中,我们将只使用每个Java运行版都内建的基础包。这使我们能在Java语言的可能的最底层上进行服务器的开发。
在很多情况下,最好的“现实”的解决方案是使用一个已经存在的框架,因为它经常提供了有用的特征如容错,负载平衡和会话。
但是,从最底层来理解这些东西是如何工作的至关重要。没有一个现有的解决方案是对所有问题都完美无瑕的,并且现有的解决方案通常有小问题是你的代码必须要解决的。简单的采用正确的预先包装好的解决方案,这种做法带着在对各种技术权衡中养成的歧视的目光。
为什么是个框架?
“框架”这个词在面向对象社区有一个技术的定义——它意味着一个可复用的纲要结构。
这跟传统的代码复用不同,在传统代码复用中,一块块的用于某个目的(或者不用于任何目的)编写的代码重新用于一个新的目的。相对来说,一个框架是一个可复用的上拱的结构,在里面你可以实现你的特殊应用。
思辨框架和传统的代码服务的一个方法是,传统代码复用关注在既存的的元素中插入自己特殊的结构,而一个框架关注的是把你的自己特有的元素插入到一个既存的框架中去。
我们将在本指南中开发的代码技术上不是一个框架,因为它没有固化下来从而允许你方便的用于其他的目的。按照这种方式来“固化”它将有悖本指南的初衷——探究服务器编程的基础技术。
然而,从一个设计的感觉,它是一个框架,因为代码的结构是你将来能一遍又一遍用到的。
我们的框架
在本指南中我们用的框架包含7个要素。一旦你读通了本指南且熟悉了这7要素,你将在创建你自己的面向连接的服务器中再次用到它们。
这7个要素是:
监听类
While-Accept 循环
Per-Thread 类
While-Read/Write 循环(服务器端)
移除死连接
客户端类
While-Read/Write循环(客户端)
最后修改于 2008-07-14 23:50
阅读(?)评论(0)