发展,通信子网在其性能上的提高,使得UDP可以发挥其强大的优势,但是安全性却实在令人担忧。
综合考虑的结果,在本聊天工具的客户端和服务器端的通讯采用TCP协议。而客户与客户端的通讯采用UDP协议。
3.2.2 数据库系统的选择
在使用数据库时,我已经学过ACCESS和SQL Server两种数据库,综合考虑,我选择SQL Server。因为:
Access是一种桌面数据库,只适合数据量少的应用,在处理少量数据和单机访问的数据库时是很好的,效率也很高。但是它的同时访问客户端不能多于4个。access数据库有一定的极限,如果数据达到100M左右,很容易造成服务器iis假死,或者消耗掉服务器的内存导致服务器崩溃。
SQL Server是基于服务器端的中型的数据库,可以适合大容量数据的应用,在功能上管理上也要比Access要强得多。在处理海量数据的效率,后台开发的灵活性,可扩展性等方面强大。因为现在数据库都使用标准的SQL语言对数据库进行管理,所以如果是标准SQL语言,两者基本上都可以通用的。SQL Server还有更多的扩展,可以用存储过程,数据库大小无极限限制。
SQL Server数据库的特征及其与Access数据库的区别:
表3.1 SQL Server数据库的特征与Access数据库的区别
内容 Access特征 MS SQL特征 版本 桌面版 网络版 可支持跨界的公司异地使用数据库的要求 节点 一人
工作,要锁定,其他人无法使用 节点多,支持多重路由器 管理权限 否 管理权限划分细致,对内安全性高 防黑客功能 否 数据库划分细致,对外防黑客能力高 并发处理能力 100人或稍多 同时支持万人在线提交,在其他硬件例如网速等条件匹配的情况下可完全实现 导出XML格式 可以,需要单作程序 可导出成为XML格式,与Oracle数据库通用,减少开发成本 数据处理能力 一般 快 是否被优化过 否 是
3.2.3 线程技术的应用
在单线程系统中,如果
系统进行如网络数据发送等在后台进行工作的应用程序时,
程序界面就会处于死锁状态,无法接受用户的输入。但在WIN95/NT中实行的是抢占式多任务,每一个进程可以同时执行多个任务,对于本系统,既要进行网络耗时工作,又要保持对用户的响应,使用多线程是最佳选择。
以下是关于线程的一些概念。
一般来说,把正在计算机中执行的程序叫做"进程"(Process) ,而不将其称为程序(Program)。所谓"线程"(Thread),是"进程"中某个单一顺序的控制流。
现代的操作系统,如Mac,Windows NT,Windows 95等,大多采用多线程的概念,把线程视为基本执行单位。线程也是Java中的相当重要的组成部分之一。
甚至最简单的Applet也是由多个线程来完成的。在Java中,任何一个Applet的paint()和update()方法都是由AWT(Abstract Window Toolkit)绘图与事件处理线程调用的,而Applet 主要的里程碑方法--init(),start(),stop()和destory() --是由执行该Applet的应用调用的。
单线程的概念没有什么新颖的地方,我感兴趣的是在一个程序中同时使用多个线程来完成不同的任务。某些地方用轻量进程(Lightweight Process)来代替线程,线程与真正进程的相似性在于它们都是单一顺序控制流。然而线程被认为轻量是由于它运行于整个程序的上下文内,能使用整个程序共有的资源和程序环境。
作为单一顺序控制流,在运行的程序内线程必须拥有一些资源作为必要的开销。例如,必须有执行堆栈和程序计数器。在线程内执行的代码只在它的上下文中起作用,因此某些地方用"执行上下文"来代替"线程"。
(1)线程体
所有的操作都发生在线程体中,在
Java中线程体是从Thread类继承的run()方法,或实现Runnable接口的类中的run()方法。当线程产生并初始化后,实时系统调用它