一个实时行情分析软件的构架问题


大家好:
目前我想实现一个类似股票实时行情分析的软件,在构架选择上有很多困惑,请大家帮帮忙。
现在已经确定,客户端用.net实现,展示行情数据,比如:k线图分析,服务端用java实现。
我的思路有两种:(1)客户端polling 轮询 (2)服务端CALLBACK 回调(webserice)
如果服务端用.net实现的话,目前有一种思路是用.net WCF的回调机制,客户端注册一次,服务端可以通过调用回调函数不断地向客户端发送最新的行情数据,直到客户端注销该功能。用java实现服务端,我在和.net客户端的互操作上遇到较大麻烦,我不能直接利用WCF的回调机制,我查到SUN 的WSIT可以和WCF交互,但我不知WSIT能否利用WCF的回调机制(CALLBACK)?
现在eclipse的新插件stp可以开发SCA,我感觉SCA和WCF有一定的相似性,可以很好的在JAVA平台实现回调,不知SCA能否和WCF良好交互,通过回调机制实现数据实时更新。
另外,我还看到JMS可以和.NET交互,不知道用JMS实现是否更有优势?和webservice回调机制相比性能如何?
最后,请版主banq 给些意见,或告诉我更好的思路。谢谢大家!

架构主要是从同步和异步两个方面考虑,webservice属于同步机制,而JMS属于异步机制,有人总是认为异步比同步性能低,实际不是这样,异步架构如果用对地方,性能和可伸缩性都要好于同步系统。这有点象一个有趣题目:乌龟和兔子过一个独木桥,那么过桥速度取决于最慢的乌龟,这也是交通堵塞的原因,这就是同步系统的缺点,如果一个请求经过很多环节,其中一个环节堵塞或很慢,将影响整个请求的响应速度,最后导致客户端迟迟得不到回应。

股票交易和行情是两个不同性质,交易属于先来后到业务性质,采取JMS无疑理想的;行情系统可以采取两种同步方式解决:拉Poll和推Push,最普通的是通过客户端POLL来实现,发出一个请求,然后等待回应;现在AJAX可以实现客户端异步拉操作,不必刷新页面,就可以源源不断将服务器数据拉到页面上。

至于Push,估计到Servlet 3.0可以实现,因为现在JavaEE版本只支持Poll拉方式,实际就是socket+http开启关闭,性能比较差,那么目前技术只有自己采取基于socket编程,通过socket一直打开,由服务器端一直push数据过来,这也是目前一些浏览器聊天室如碧聊等实现原理。

我还真想知道谁会认为异步的性能比同步低。。。

2011年01月11日 12:11 "zorwi"的内容
异步的性能比同步低 ...

只要用错了,就会低,如单单异步,却不考虑是否真的相互独立。可以拿硬盘串口和并口的例子来了解下,再举个例子:访问数据库同一样数据,异步的话,则是各顾各的,但因为是一样的数据,完全可以只访问一次,所有线程共同获取同一个(这个效果我自己项目就实现过了)。

总的来说,不考虑前提条件的话,同步和异步没有优劣之分。