急请:有关BS结构中的(B端对B端交互)数据交互问题!
本来是想用图表示出来的,但图片弄不进来,没办法,只好在下面说了。
结构:
WEB服务器(S端)(有IP)
IE客户端(A端)(没有固定IP)
IE客户端(B端)(没有固定IP)
流程:
1、A端发起申请,首先将数据同步到S服务器上,同时将数据也要告诉B端
2、B端收到A端发起的申请后,管理员做处理,此时将数据同步到S服务端,再自动将处理结果发馈到A端
已用方案:
1、A端发起申请,首先将数据同步到S服务器上
2、B端通过AJAX不断的连接S服务端的数据库,判断是否有更新,然后再提示在B端
3、B端提示后,管理员做处理,此时将数据同步到S服务端
4、A端通过AJAX不断的连接S服务端的数据库,得到相应的反馈,再提示在A端
结论:
对服务器的负载太重了,严重的减低了服务器的工作效率与降低了AB端的页面处理效率
本来是打算用remoting的,但是用remoting很麻烦,好像一定要确定的IP,由于AB端是没有确定的IP的,所以通信起来很麻烦。还请哪位高手指点一下,给个好的方案,先谢了。
------解决方案--------------------没有更好的方案了,BS架构里,B对B的通信本来就是不可能直接实现的,只能通过S中转。不过,可以对这种方式进行优化,比如说在S端做一点缓冲机制,A发出申请时写数据库,但同时更新缓冲池内的信息,B不直接读库,而是先判断一下缓冲池中是否有信息,这样系统的开销会小很多。
------解决方案-------------------- "通过AJAX不断的连接S服务端的数据库 "
把不断连接的时间间隔加大,
同时服务在处理“不断连接”时,如果有数据立即返回,没有数据,则一直拖到接近浏览器超时值(通常可以30-60S),IE的超时通常在60s内是可行的
这样服务器的负载基本在1分钟1次请求,局域网环境还算可以
------解决方案--------------------不知道你的数据结构,写点流程描述吧。
A端发出申请至服务器-> 更新数据库-> 服务器接收后先检查缓冲机制(可用Application或Cache或静态类实现)中是否有相应的标识,若没有则新建,若存在则改变相应的状态标志
B端定时发出申请至服务器-> 服务器接收后先检查缓冲机制-> 若没有则根据数据库中信息重建标识-> 判断缓冲机制中的状态标志并进行下一步操作(若需更新数据库则更新完毕后更新缓冲中的状态标志)-> 返回结果
A端定时发出申请至服务器-> (同B的操作过程,但逻辑不同)-> 若操作周期完毕则清除缓冲中相应信息-> 返回结果
这其实是一种非常简陋的缓冲机制,具体方法可根据实际项目的要求进行算法的优化。
注:定时刷新千万别强制每秒刷啊,而是客户端在读取完上一次刷新结果后隔1秒再刷,不然再强的服务器也顶不住。