简易聊天程序教程(三)服务器的多线程

源代码下载链接: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) {

			}

		}
	}

因为服务器应该是守护进程这样的,因此会一直循环。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值