简易聊天程序教程(三)服务器的多线程
来源:互联网 发布:做音乐的软件 编辑:程序博客网 时间:2024/04/28 08:59
源代码下载链接:http://download.csdn.net/detail/sky453589103/9514686
如果有什么问题,欢迎留言。
如果一个服务器只能为两个用户提供服务器,那就真的是太渣了。很多时候,聊天的客户都会大于两个。因此需要提高并发量。
在Java中使用多线程还是很方便的。我在这个服务器程序使用的是实现Runnable接口的方法来定义自己的多线程操作。通过重写run方法,来实现自己的多线程操作。
每个线程都会有一个client成员变量,这个成员变量用来记录客户端的Socket。然后,每个线程都会使用同一个服务器。
服务器的多线程,基于下面一种思想,如果有一个新的客户登陆,为这个客户新建一个线程,这个线程会以阻塞的方式来监听来自客户的信息。一旦获取到信息,就使用RequestMessage类来解析信息。然后根据信息的不同,执行server中的对应的接口。如下图:
显然,服务器资源是临界资源,因此需要对临界资源的使用加上互斥条件。使用synchronized关键字可以很方便的满足我们的需求。
简单的介绍一下这个关键字:当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。通俗的说,就是用synchronized来上锁。
需要注意的是,在Server的接口中LogOut接口的返回值一直null,如果response为null的时候,这个线程不会向客户发送任何东西。
在SimpleChatServer中,会阻塞的调用accept函数来监听是否有新的连接建立,如果有就为这个连接创建一个ServerThread类,来执行相应的任务。创建为每个连接创建一个线程的动作在startn函数中,这个函数的意义是启动的意思。一旦启动这个服务器,上述的动作就会被执行。
public void startn() {while (true) {try {Socket s = serverSocket.accept();Thread t = new Thread(new ServerThread(s, this));t.start();} catch (IOException e) {}}}
因为服务器应该是守护进程这样的,因此会一直循环。
0 0
- 简易聊天程序教程(三)服务器的多线程
- 简易聊天程序教程(二)服务器的基本功能
- 简易聊天程序教程(零)简介
- 基于Java socket和多线程的简易聊天小程序
- 一个简易的聊天程序(Socket)
- 简易聊天程序教程(四)客户端基本功能
- 简易聊天程序教程(五)客户端的登陆和注册窗口
- Linux上的网络聊天程序--多线程的服务器程序
- 简易聊天程序教程(六)主窗口和聊天窗口
- UDP的简易聊天程序图型多线程版 带原代码
- 使用多线程和Udp实现简易聊天程序
- 简易聊天程序的python实现
- C# Winform的简易聊天程序
- Winform简易聊天程序的设计
- 第一个python程序-python简易教程(三)
- 简易聊天程序教程(一)自定义异常和消息格式
- C#简易聊天机器人(控制台程序)
- tcp简易聊天程序
- 各种计算机编程语言之父
- 使用xml 和merge 维护表数据的代码生成脚本
- C++——成员函数
- 补间动画
- HDOJ 3037 Saving Beans (Lucas定理)
- 简易聊天程序教程(三)服务器的多线程
- DDL、DML和DCL的理解
- FPGA基础知识1(FPGA芯片结构)
- 微信支付开发-从零开始-Part3
- Neutron
- 使用ASP.Net WebAPI构建REST服务(一)——简单的示例
- 51nod 1455 宝石猎人(dp or 记忆化搜索)
- android studio 下aidl的使用遇到的坑
- HDU 1102 Constructing Roads