最近学习java socket编程。多个客户端可同时连接服务器。
在服务器端的编程中遇到一个问题:
//专门用于监听,如果有客户端连入,就产生一个线程 CreateThread
class ServerSocket {} //专门用于接收客户端消息和往客户端发送消息,将接收到的客户消息传给 BusinessProcess
class CreateThread {} //接收从CreateThread传递而来的客户端的消息,进行业务处理,产生结果消息,通过CreateThread传递给客户端
class BusinessProcess {} 想问下,BusinessProcess 怎么同时处理同多个线程(即多个用户)请求的业务?还是改变下类的设计更好?
在服务器端的编程中遇到一个问题:
//专门用于监听,如果有客户端连入,就产生一个线程 CreateThread
class ServerSocket {} //专门用于接收客户端消息和往客户端发送消息,将接收到的客户消息传给 BusinessProcess
class CreateThread {} //接收从CreateThread传递而来的客户端的消息,进行业务处理,产生结果消息,通过CreateThread传递给客户端
class BusinessProcess {} 想问下,BusinessProcess 怎么同时处理同多个线程(即多个用户)请求的业务?还是改变下类的设计更好?
然后所有的动作都在这个Thread里面做,这样是很典型的,
我怎么觉得你说的很复杂呢?
嘿嘿。去看看BusinessProcess
BusinessProcess 类设计有3个要点
1.实现Runable接口,便于多线程业务处理。
2.能够获取客户端对象引用,以便于产生消息的派送
3.同步run方法,已实现线程同步,保证服务器业务逻辑处理的原子性。
线程,也可以理解为,指令的执行器。
服务端开发当中,我们可以为每个用户保留其自己的数据。
而这些数据的交互规则,则可以用相同的指令来完成。
不同的只是每个用户的数据。
指令的执行,是需要线程来执行的。
通过使用多线程,可以实现,相同的指令操作不同的用户数据。
每个用户分配一个线程,那么相同的处理过则,就会处理每个用户自己的用户数据。
Java面向对象的编程当中,有些类的功能是偏指令的,有些类的功能是偏数据的。
楼主能够分清这些,对于程序的设计思想就会更清晰一些。指令,可以理解为类的方法内容;数据可以理解为类的成员变量。
以上描述不一定准确,但,可以为大家提供一个新的角度。
这样,等你要向多个客户端发送信息的时候,只需要遍历这个集合,用一个For()循环,就可以实现对多个客户端发送消息的功能