如题,client A、B是两类客户端。业务流程是client A提交信息到server,server端根据提交信息初步处理然后提供决策给client B客户端选择,client B把选择结果发送回server,server端根据该结果作进一步处理,并把结果发送回client A~
小弟初学socket编程,感觉c/s架构都是request/response类型的,但类似server->client_B却是服务器的主动推送,这该如何实现?(准备吧client A和Client B端的程序开发成eclipse插件格式)serversocket服务器主动推送

解决方案 »

  1.   

    在这里看到clientB在业务功能上只扮演了服务端的角色,貌似没有必要定位成客户端。
      

  2.   

    这就相当于一个流水线,clientA和clientB各负责一部分功能,处理结果统一提交服务器再处理~另外,也有可能有clientB单独提交一些信息到服务器,触发clientA作出一些处理,所以ClientA和B都应该是客户端~
      

  3.   

    你的这个问题可以分为两个部分,第一个问题是clientA连接server端并推送信息,server端返回处理结果给clientA;第二个问题是server端连接clientB并推送信息,clientB将处理结果返回给server。其中第一个问题可以在clientA使用socket连接server端的ServerSocket,第二个问题使用server端的socket连接clientB的ServerSocket。在这个过程中,server端有一个角色转换,在第一个问题中可以认为是服务器,而第二个问题被认为是客户端。在整个过程中有一个难点是,server端如何定位clientB。如果clientB有固定的地址就比较好处理了;如果不固定,只能通过在服务器建立客户端注册信息,服务端通过注册信息查找clientB的地址。
      

  4.   

    如果clientB要扮演双重角色功能,就按双重角色的标准去实现它,只是往往不可能所有都兼顾。
      

  5.   


    假设有三个客户端A,B,C
    他们与服务器连接后服务器开辟三条子线程thread_A,thread_B,thread_C分别处理服务器与客户端的通信,
    如果客户端A通过thread_A发给服务器一段信息,希望通过服务器把这段信息发给客户端B,服务器如何处理才能调用thread_B线程把信息发给客户端B呢
      

  6.   


    刚才想了下 服务器可以保留一个线程集合,每当创建线程时把线程放入集合中,每个线程对象都有特定的标志位,当客户端A向B通信时,服务器遍历集合中的线程对象,找到对应标志位的线程对象,然后调用该线程对象的些方法把客户端A传来的信息输出给客户端B
    但是我觉得如果客户端很多时遍历岂不是很耗时,但是想不出别的办法了
      

  7.   


    那服务器只能传udp包了吧 如果客户端是移动设备那就麻烦了 还要监听设备网络状态 更新连接信息 头痛
      

  8.   

    准备让client_B一直轮询服务器,当有需要处理的信息,再以轮询的response形式发送给client_B,不知道行不?