client_A->server->client_B实现

goodbaby728 2013-02-14 12:15:18
如题,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插件格式)
...全文
352 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
goodbaby728 2013-02-18
  • 打赏
  • 举报
回复
准备让client_B一直轮询服务器,当有需要处理的信息,再以轮询的response形式发送给client_B,不知道行不?
caisaisai 2013-02-17
  • 打赏
  • 举报
回复
引用 7 楼 bluemoby 的回复:
引用 6 楼 caisaisai 的回复:引用 5 楼 caisaisai 的回复:引用 3 楼 bluemoby 的回复:你的这个问题可以分为两个部分,第一个问题是clientA连接server端并推送信息,server端返回处理结果给clientA;第二个问题是server端连接clientB并推送信息,clientB将处理结果返回给server。其中第一个问题可以在……
那服务器只能传udp包了吧 如果客户端是移动设备那就麻烦了 还要监听设备网络状态 更新连接信息 头痛
bluemoby 2013-02-16
  • 打赏
  • 举报
回复
引用 6 楼 caisaisai 的回复:
引用 5 楼 caisaisai 的回复:引用 3 楼 bluemoby 的回复:你的这个问题可以分为两个部分,第一个问题是clientA连接server端并推送信息,server端返回处理结果给clientA;第二个问题是server端连接clientB并推送信息,clientB将处理结果返回给server。其中第一个问题可以在clientA使用socket连接serv……
服务器端为每个客户端保留一个线程并不合适,如果客户端太多,服务器资源就会耗尽,只需要在服务器保存每个客户的连接信息,在需要传递信息的时候,启动一个线程连接对应客户端发送信息,完成信息传递后,线程结束或者返还给线程池。
caisaisai 2013-02-16
  • 打赏
  • 举报
回复
引用 5 楼 caisaisai 的回复:
引用 3 楼 bluemoby 的回复:你的这个问题可以分为两个部分,第一个问题是clientA连接server端并推送信息,server端返回处理结果给clientA;第二个问题是server端连接clientB并推送信息,clientB将处理结果返回给server。其中第一个问题可以在clientA使用socket连接server端的ServerSocket,第二个问……
刚才想了下 服务器可以保留一个线程集合,每当创建线程时把线程放入集合中,每个线程对象都有特定的标志位,当客户端A向B通信时,服务器遍历集合中的线程对象,找到对应标志位的线程对象,然后调用该线程对象的些方法把客户端A传来的信息输出给客户端B 但是我觉得如果客户端很多时遍历岂不是很耗时,但是想不出别的办法了
caisaisai 2013-02-16
  • 打赏
  • 举报
回复
引用 3 楼 bluemoby 的回复:
你的这个问题可以分为两个部分,第一个问题是clientA连接server端并推送信息,server端返回处理结果给clientA;第二个问题是server端连接clientB并推送信息,clientB将处理结果返回给server。其中第一个问题可以在clientA使用socket连接server端的ServerSocket,第二个问题使用server端的socket连接c……
假设有三个客户端A,B,C 他们与服务器连接后服务器开辟三条子线程thread_A,thread_B,thread_C分别处理服务器与客户端的通信, 如果客户端A通过thread_A发给服务器一段信息,希望通过服务器把这段信息发给客户端B,服务器如何处理才能调用thread_B线程把信息发给客户端B呢
bluemoby 2013-02-15
  • 打赏
  • 举报
回复
你的这个问题可以分为两个部分,第一个问题是clientA连接server端并推送信息,server端返回处理结果给clientA;第二个问题是server端连接clientB并推送信息,clientB将处理结果返回给server。其中第一个问题可以在clientA使用socket连接server端的ServerSocket,第二个问题使用server端的socket连接clientB的ServerSocket。在这个过程中,server端有一个角色转换,在第一个问题中可以认为是服务器,而第二个问题被认为是客户端。在整个过程中有一个难点是,server端如何定位clientB。如果clientB有固定的地址就比较好处理了;如果不固定,只能通过在服务器建立客户端注册信息,服务端通过注册信息查找clientB的地址。
dracularking 2013-02-15
  • 打赏
  • 举报
回复
引用 2 楼 goodbaby728 的回复:
引用 1 楼 dracularking 的回复:在这里看到clientB在业务功能上只扮演了服务端的角色,貌似没有必要定位成客户端。这就相当于一个流水线,clientA和clientB各负责一部分功能,处理结果统一提交服务器再处理~另外,也有可能有clientB单独提交一些信息到服务器,触发clientA作出一些处理,所以ClientA和B都应该是客户端~ ……
如果clientB要扮演双重角色功能,就按双重角色的标准去实现它,只是往往不可能所有都兼顾。
dracularking 2013-02-14
  • 打赏
  • 举报
回复
在这里看到clientB在业务功能上只扮演了服务端的角色,貌似没有必要定位成客户端。
goodbaby728 2013-02-14
  • 打赏
  • 举报
回复
引用 1 楼 dracularking 的回复:
在这里看到clientB在业务功能上只扮演了服务端的角色,貌似没有必要定位成客户端。
这就相当于一个流水线,clientA和clientB各负责一部分功能,处理结果统一提交服务器再处理~另外,也有可能有clientB单独提交一些信息到服务器,触发clientA作出一些处理,所以ClientA和B都应该是客户端~

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧