在搞一个金融类的项目,目前是期货方向。现在的架构:flash + php,PHP每秒钟扫描实时数据是否有变化,如果有更新就在SOCKET端用循环的方式向所有连接的客户端发送数据,因为同时推送的数据较少(现在只有4组实时数据需要给客户端推送),而且在线人数较少,所以暂时这个架构暂时还可以应付。近期打算把SOCKET方面重写,考虑到以后可能会有上千人在线,并且会有更多品种的实时数据(如果是股票的数据可能会有几千组的实时数据),所以暂定JAVA,而且大部分功能都已经实现。目前卡在一个地方:如果用JAVA的多线程来实现的话,上千个线程在一秒钟内同时扫描和读取实时数据不太现实,有没有简单可行的方案,比如用一个线程或者进程独立扫描实时数据,然后再把有变化的实时数据分发给那上千个线程?请大家多多发表意见,分不够再加!

解决方案 »

  1.   

    自己顶一个,顺便再补充一个问题。。就目前这4组实时数据来说,用PHP循环的方式给几千个客户端推送数据,效率怎么样?
      

  2.   

    说的稀里糊涂。1、flash+php是你的服务器上的架构?
    2、socket端是哪端?是不是这样的:客户访问一个flash的网页,
    这个flash网页每秒调用一个php脚本,
    如果发现有更新数据,就在客户端显示?
      

  3.   


    客户端是FLASH,通过SOCKET调用的PHP写的SOCKET服务,在实时数据接收上,现在已经实现了SOCKET发送,但是由于PHP不支持多线程,所以现在的架构是PHP循环给多个FLASH客户端发送实时数据。我正是担心PHP的这种架构的性能,所以考虑用JAVA来实现,但是却卡在了如何把那4组实时数据推送给上千个线程。。不知道这么说是否理解?
      

  4.   

    你说的有一点问题,
    你这个架构不是推送,实际上还是客户端主动去访问php的脚本
    在程序合理的前提下,负载上应该没有问题如果是单纯用php实现socket服务,不太合适。在大负载的情况,考虑一下队列的方式。
      

  5.   

    你这个系统主要还是要考虑架构的合理性就像你说的上千个线程同时访问实时数据,是不太现实的,而且对方的接口可能也不会允许你这样的并发访问。用java来做一个服务端的daemon程序,单进程,来抓取实时数据,放到本地,本地服务器端的脚本以队列的方式处理客户端的请求这个结构应该没问题
      

  6.   


    不是HTTP访问,是SOCKET~~,我现在这个循环基本上跟队列相似,不过是服务器端主动推送给客户端的。