日期:2014-05-18  浏览次数:20513 次

关于web应用中的socket通讯问题,望大家讨论
现在有一个类,里面有3个方法,第一个建立一个socket并与服务端连接,第2个向服务端发送数据,第3个从服务端接收数据.我第一个页面是向服务端发送数据,那么我肯定要new一个这个类的对象然后调用1,2方法,那么当我在第2个页面要接收数据的时候怎么样能不new一个这个类新的对象再调用3方法,因为如果我new一个这个类新的对象又要去调用1方法连接服务端,相当与是个新的socket了,不符合逻辑.说白了就是同一个客户端只用实例化一次这个类,在不同的地方调用这个类中的不同发送接收方法的时候都知道是这个socket已与服务端连接了.
      本来想过把这个类做成静态类,但是一考虑如果有并发的情况,那么后来的客户端如果改变了静态类中的静态成员值,比如静态方法的参数,那么先前的客户端所调用的相同静态方法不是也跟着变了么......
      不要问我为什么要在web应用这种B/S结构中做socket,因为我也觉得不合理,一个是短连接,一个是长连接,非要做在一起,没办法,公司要求,望各位高人帮忙想下,谢谢

------解决方案--------------------
把第一个页面里把类保存在session或application中
------解决方案--------------------
或许你误解了你们的 PM 的意思?!

首先,什么叫做“客户端”?客户端页面只能在服务器端与远程服务器建立联系,也就是说你的web服务器与远程服务器建立联系,而不是客户端与远程服务器建立联系。

其次,只能在同一个页面中打开连接、传递数据、赶紧关闭连接。否则,你的web服务器就会变成想当然地开发时似乎可用,而一旦正式上线则根本无法处理稍微多一点(例如才几十个客户)的情况。我没有仔细看你的描述,如果我仔细看了,我估计你的设计3个客户时都立刻就会让系统垮掉。

最后,把服务器之间的通讯单独独立出来成为一个项目,跟web网站无关。或者,直接使用webService这种已经独立封装好的系统。