Tomcat怎么实现客户端之间通信

shangmingchao 2014-06-24 10:29:21
第一次发帖,真的想请大神们帮一下:我本来基于Myeclipse+Tomcat利用Servlet技术实现了我的服务器与客户端的HTTP通信,客户端每次发HTTP请求(包括数据)给服务器的一个Servlet,服务器处理完把结果返回给客户端。但是,现在一个客户端需要发给另一个客户端数据,该怎么办啊,用什么技术可以实现。希望详细点说一下,先谢了。
...全文
895 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_35357150 2017-01-16
  • 打赏
  • 举报
回复
在长连接的状态下:Server可以会为每个Client生成一个socket,这时你可以从每个socket获得输出流out并绑定一个标记,比如给A客户端对应的out绑定为A,并放到一个Map中;当一个客户端要给A客户端发消息时,Server会解析你发的消息知道你发给A (在这之前要先规定通信协议,比如用@A:XXXX;表示要发送给A客户端,内容是XXXX; ),到MAP中找到A客户端对应的输出流out,这样就可以完成一对一发送消息,如果是变量Map中每个out,则是群发; 如果不是在长连接情况下,即一次请求一次响应,因为这种连接是无状态的Server是无法知道也不关心客户端的状态,server不会主动向Client发起请求;只能客户端直接连接客户端直接发送消息; 我就知道这些,希望对你有用
shangmingchao 2014-06-30
  • 打赏
  • 举报
回复
说的对,套接字和Ajax都行,但我现在又不想再重新做,只能在服务器数据库单开一个表来存消息,再处理了。。。
melonboy312 2014-06-27
  • 打赏
  • 举报
回复
两个办法, 1.轮询。客户端定时向服务器请求是否有自己的数据,当某个客户端a发送数据给b时,服务器把数据存下来,记录a要把这个数据发给b,当b来轮询的时候,就把这个数据作为响应返回给b。 优点:实现简单。 缺点:有延迟。 2.长连接。客户端a使用ajax发送不超时的请求给服务器,服务器在收到请求后,将此请求挂起,直到有客户端b向服务器请求要发送数据给a时,唤醒a之前的请求,并把数据返回给a。 优点:没有延迟。 缺点:实现比较复杂,服务器容易压力过大。 你的这个问题,其实本质上就是http协议是无状态无连接的协议,服务器是不知道有客户端存在的,你可以搜索下相关内容。 对了html5的websocket可以完美解决这个问题,不过我没用过,你可以试试。

24,923

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Apache
社区管理员
  • Apache
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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