最近学习java socket编程。多个客户端可同时连接服务器。
在服务器端的编程中遇到一个问题:
//专门用于监听,如果有客户端连入,就产生一个线程 CreateThread
class ServerSocket {}   //专门用于接收客户端消息和往客户端发送消息,将接收到的客户消息传给 BusinessProcess
class CreateThread {}   //接收从CreateThread传递而来的客户端的消息,进行业务处理,产生结果消息,通过CreateThread传递给客户端
class BusinessProcess {}  想问下,BusinessProcess  怎么同时处理同多个线程(即多个用户)请求的业务?还是改变下类的设计更好?

解决方案 »

  1.   

    ServerSocket accept到一个连接后,就 create a thread.
    然后所有的动作都在这个Thread里面做,这样是很典型的,
    我怎么觉得你说的很复杂呢?
      

  2.   

    楼主的设计逻辑已经很清晰了啊。只要注意在BusinessProcess 是处理好线程同步问题
      

  3.   

    BusinessProcess??,没用过,呵呵,一般就是服务器监听,监听到一个请求就开启一条线程,然后每个线程对应一个客户。
    嘿嘿。去看看BusinessProcess
      

  4.   

    CreateThread 应该设计成能同时持有服务器对象和客户端对象的引用,这样便于有针对性的传送信息。
    BusinessProcess 类设计有3个要点
    1.实现Runable接口,便于多线程业务处理。
    2.能够获取客户端对象引用,以便于产生消息的派送
    3.同步run方法,已实现线程同步,保证服务器业务逻辑处理的原子性。
      

  5.   

    程序,泛泛的将,就是分为,指令和数据两个部分。
    线程,也可以理解为,指令的执行器。
    服务端开发当中,我们可以为每个用户保留其自己的数据。
    而这些数据的交互规则,则可以用相同的指令来完成。
    不同的只是每个用户的数据。
    指令的执行,是需要线程来执行的。
    通过使用多线程,可以实现,相同的指令操作不同的用户数据。
    每个用户分配一个线程,那么相同的处理过则,就会处理每个用户自己的用户数据。
    Java面向对象的编程当中,有些类的功能是偏指令的,有些类的功能是偏数据的。
    楼主能够分清这些,对于程序的设计思想就会更清晰一些。指令,可以理解为类的方法内容;数据可以理解为类的成员变量。
    以上描述不一定准确,但,可以为大家提供一个新的角度。
      

  6.   

    多个客户端是需要连接服务器的,对吧,每次连接进来的服务器,你就保存在一个集合对象中,比如LinkedList(),要客户端连接,就add();
    这样,等你要向多个客户端发送信息的时候,只需要遍历这个集合,用一个For()循环,就可以实现对多个客户端发送消息的功能