日期:2014-05-17  浏览次数:20737 次

设计求解决方案
linux下安装tomcat,网页部署到tomcat中

需要在网页中配置一些参数,点击提交到服务器中,但是服务器需要建立UDP socket,转发给第三方应用程序进行配置,通过socket 采取UDP通信,第三方应用程序返回配置是否成功,再返回给网页界面显示配置是否成功。

第2点是从网页界面请求一些统计数据,而这些统计数据需要从第三方应用程序获取,需要向这个第三方应用程序发SOCKET消息,然后接收第三方程序回来的数据,再返回给界面。

如何实现这种思想,目前是建立了一个ACTIVEX控件,采用控件直接和第三方应用程序通信。但是这种方法弊端很大,控件需要数字签名,麻烦,而且只能在windows下用

请问能用JSP/Servlet 实现吗?
有大牛给出设计思路吗,能给出已有范例更好,谢谢

------解决方案--------------------
你说的意思我完全明白,之前项目做过类似的需求,我们当时的比你这个复杂得多,服务端需要和三个不同的数据接口交互,socket只是其中一部分,完全可以不用activeX控件,控件的更新签名确实很麻烦
------解决方案--------------------
UDP连接宏观上都是一种服务,即在你的Service层进行UDP连接。其实这就是一个分布式的体现。例如银行的系统,都是在Service层请求消息,而消息的返回是通过IBM大机。第二点同理。
------解决方案--------------------
简单地说,你在你的应用action或者service层去做socket数据交换就可以了,web只是操作和数据展现
------解决方案--------------------
建议整个模型基于异步框架进行处理,而不是直接阻塞线程等待第三方系统返回信息,大致如下:

1、服务器启动时即建立面向第三方应用的UDP监听线程,将所有收到的第三方应用消息写入数据库中(或者内存中也行,但要注意管理时效性,也就是应该为Memcache);
2、浏览器用Ajax向服务器(可以是Servlet)发送查询请求;
3、Servlet将请求记录到数据库中(或内存中,与1保持一致),然后将信息以UDP形式发送给第三方系统;
4、Servlet返回:请求已提交,请等待n秒(可事先设置或动态统计);
5、浏览器端显示伪进度条;
6、n秒后,浏览器用Ajax向服务器(可以是另一个Servlet)发出查询结果请求;
7、Servlet从数据库(或内存中,与1保持一致)进行查询,如得到结果则立即返回,否则继续提示等待;
8、浏览器如果重复5~7若干次后仍无果,则显示超时失败。

整个过程虽然逻辑上略显复杂,但绝对不会阻塞线程,降低系统整体可用性风险。