JSP中Socket监听问题
1个回答
展开全部
好吧,也许你改不了server端接收请求的action,那么你也只要call 18次ajax就行了,因为client的异步调用的线程是浏览器管理的,你在jsp上写任何代码都不会在client端生出线程来。至于你后台的socket连接你可以把每个放在一个thread里,也可以使用池的方式管理。追问:
我把socket放在Thread里面后,他是可以循环实时的执行,但是前台页面无法获取返回的信息,我刚开始就是这么做的,发现页面调用AJAX发送请求到ACTION这个流程的操作和Thread是不同步的,他们各干各的互不相关,回答:
对啊,ajax请求是客户端线程,浏览器管理的,后台管理socket的thread是你自己建的,根本就是2个东西。所以我建议你,页面部分就每分钟发一次ajax请求,然后在action里去依次访问管理socket的线程拿到地市信息,最后合成一个XML response返回给页面的ajax回调函数。追问:
现在我有两种做法,一是在页面上通过AJAX连接池每分钟执行一次,同时调用18次函数发送18个请求到ACTION,也就是说后台ACTION会接收到18个****.do的请求,每一个请求都是相同的调用DAO操作类中的方法去发送一个Socket请求,获取返回状态和信息后生成XML返回给页面,页面再进行不同的处理。二是在页面上每分钟只发送一个请求,后台根据数据库中的各个地市IP和端口建立18个socket请求,返回的状态信息全部保存在生成的XML中,返回给页面,页面再进行处理,
这两者的区别在哪?是不是第二种的做法会节省一点资源?回答:
明显第二种好:
1。http连接虽然廉价,但是也有代价的。
2。浏览器监听ajax response也是有代价的。
3。server端能同时处理的http请求也是有限的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询