快速业务通道

推技术聊天室的实现(上) - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
路复用。

iv 超级服务器(inet)激活的服务器。

并发服务器由于其算法而具有与生俱来的快速响应优势,而且当某一个用户与服务器通信死锁不会影响其他进程,但由于多个进程之间需要通过进程间通信实现信息交换,而且fork新进程所带来的开销随着用户数量的增加越来越大,因此原始的并发服务器并不一定是最好的选择。JAVA语言给我们带来的方便的线程机制,使我们可以用多线程来代替多进程,实现并发服务器,为我们进行快速的商业版本的聊天室的开发提供了优势。

值得注意的是,在linux下,JAVA并没有实现真正的多线程,本质上仍然是多进程。

◆POST与GET

提交form表单信息一般常用的有两种:POST或者GET。POST由于长度不受限制,而作为大多数form提交时使用的方法。GET方法通过URL来发送提交信息,由于URL被WWW服务器限制了长度,一般最长只能为1024字节,所以如果发送信息很长的话,就不能使用这种方法。

由于我们对聊天内容有长度限制,不会太长,而且普通浏览页面使用GET方法,使用GET方法提交form表单可以简化处理过程,所以我们可以使用这种方法来提交聊天内容。

我们感到美中不足的是GET方法将提交的内容简单的附在连接后边,我们如果能够将提交的内容进行HTML编码的话,就可以让客户舒服点了。

◆用JAVA实现并发SOCKET通信

如果以前做过C的SOCKET编程,那么这一段对你来说将不是什么难事。利用JAVA的多线程机制我们可以非常方便的实现并发服务。

每当我们知道服务器主程序创建一个新的套接字连接(即成功地调用了accept()方法)的时候,就启动一个新的线程来负责本服务器和该客户之间的连接,主程序将返回并等待下一个连接。为了实现这个方案,本服务器主循环应该采用如下形式:

while(true) { Socket newjoin=s.accept(); Tread t=new ThreadedChatHandle(newjoin); t.start(); }

推技术聊天室的实现(上)(3)

时间:2010-12-25

ThreadedChatHandle类是从Thread类衍生出的处理聊天过程的子类,它的run()方法包括了服务器和客户的通信循环——判断客户的请求(例如登录、发言、刷新在线列表),处理发言数据,发送聊天信息等等。下面是一个服务器程序的例子,可以帮助初学者尽快理解。

import java.io.*; import java.net.*; public class ChatServer { public static void main(String[] args) { int I=1; try {ServerSocket s=new ServerSocket(8080); /*创建一个监视8080端口的服务器套接字,如果需要,你可以改成80端口*/ for(;;) { Socket newjoin=s.accept(); /*等待一个连接。如果这个连接没有被创建,本方法阻塞当前线程。返回值是一个 Socket对象,服务器程序利用这个对象可以与连接的客户通信。*/ System.out.println(“新连接”+i); new ThreadedChatHandle(newjoin,i).start(); /* ThreadedChatHandle(Socket theS,int c)是我们自己定义的聊天服务类,这个 类在后边我们有进一步描述*/ i++; } } catch(Exception e) { System.out.println(e); } } …… }

多进程(线程)并发服务的一个关键问题是,如何实现进程(线程)间通信。每个客户的发言(包括表情和动作等选项)都需要放在一个公共的地方,让所有的输出线程都能够获得它。解决的方法有很多,比如说放在数据库里,放在大家都有权限的dat文件里,或直接用管道实现进程间通信。其中,对一个聊天室服务器来说,第一种方法是最傻的,太消耗系统资源,而且使程序执行效率变慢,可能出错环节增多。而使用管道通信的方式,把所有发言数据都保存在内存里,不但可以获得最高的执行效率,安全的执行过程,也不用考虑线程同步的问题。不要以为所有的发言数据会很多,其实服务器端只要保存最后100句就已经很了不

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号