需求是需要在页面刷新某些数据,但数据是从导航仪终端经Socket传到C++Server上,我在Tomcat里用S2SH项目的架构,我设计2个方案:
1,用Ajax请求,Tomcat分配一个线程处理请求,在这个线程上去访问C++socket服务,取数据返回,这样只能用短连接,每次关闭socket,而Ajax可能需要没1S 秒发送一个请求?这样页面显示是否会很慢?
2,在Tomcat的S2SH项目启动时,在Servlet 的init()里启动一个Socket(Client)线程,长连接C++ServerSocket,这样页面的Ajax请求线程需要和Socket(Client)线程 访问同步的数据,是做一个线程安全的队列,来彼此通讯数据?
求解,有巨匠高人有好的建议不?或有类似的Tomcat内取C++ServerSocket项目经验?

解决方案 »

  1.   

    非巨匠高人关注servlet里面启动的socket线程不结束,不知道会不会完成此次请求。
    或者,servlet完成请求了,线程还没完,算怎么回事
      

  2.   

    服务器向客户端实时推送数据,可以考虑使用服务器推技术,如Comet
      

  3.   

    如果在同一个线程内,Socket不结束,servlet也无法完成请求因为在同一个线程内,我认为。
    Comet 服务器推送数据,在浏览器端需要什么技术,能用IP找到这个浏览器,定时的用类似Ajax异步的推送数据吗?
      

  4.   


    “服务器推”技术在现实应用中有一些解决方案,本文将这些解决方案分为两类:一类需要在浏览器端安装插件,基于套接口传送信息,或是使用 RMI、CORBA 进行远程调用;而另一类则无须浏览器安装任何插件、基于 HTTP 长连接。长见识了,这样才能真正解决问题,
    我得需求是要在google地图上,动态可以有延时的显示导航仪(也就是装了导航仪的汽车的位子)。如果需要浏览器发送请求,请求频繁,Tomcat也无法及时处理返回,并且导航仪GPS点信息变更是在服务器端触发的,浏览器无法知道,只能不停的刷新请求。
    wang12
    (EricWang)
    你有这种技术现实的经验不? 在tomcat服务器上能使用不?
      

  5.   

    目前在做的项目中没有这方面的需求,目前只是个人研究。
    Pushlet是Java版的comet实现:在Servlet机制下,数据从server端的Java对象直接推送(push)到(动态)HTML页面。无需任何插件帮助。你可以查找一些资料,绝对是不二选择。
      

  6.   

    数据到浏览器可以用服务器推技术,但tomcat中导航GPS的数据需要从C++ServerSocket获取,又是老问题,我是开一个并发的socket线程去收C++ServerSocket的包,这样我怎么和tomcat里的servlet(无论是推送还是请求的)线程,同步访问数据?比如要用什么数据结构能线程安全? C++那端说是用队列收取和发送的,并发加同步锁,tomcat里怎么处理?
      

  7.   

    个人认为可以使用JMS(Java Message Serivce),原来的并发socket线程可以合并在JMS中实现,再通过Tomcat和JMS消息服务器的通讯传送坐标数据
      

  8.   

    JMS 需要什么服务器吗 需要在Jboss 中实现 ,那怎么和tomcat通信,这是EJB了?
      

  9.   

    Jboss对Tomcat进行了进一步的封装,实现了更多的J2EE规范,Jboss的内部ServletContainer就是Tomcat。
    Java消息服务(JMS)应用程序结构支持两种模型:
    点对点或队列模型
    发布者/订阅者模型
    我理解,你的需求模型为第二种:服务器端将消息推送给多个客户端。
    具体的JMS介绍可参阅
    http://www.baidu.com/s?bs=JMS+jboss&f=8&rsv_bp=1&wd=JMS&inputT=1938