我写的是一个监控系统,要时实的从DB里取出更新的数据。我做的是每隔50ms跑躺DB,结果就有人说我这是虐待数据库,服务器。我问他是用触发器吗?他就不说了话。
后来我看到EasyJF做的一个东西讲到说“为了能不断接收到别人的发言信息,需要定时不断的从服务器端读取数据,因此,需要在客户端启动一个定时器,每隔一定的时候自动使用xmlhttp对象到服务器端下载别人的发言信息”。指点一下吧,什么才是对的。
后来我看到EasyJF做的一个东西讲到说“为了能不断接收到别人的发言信息,需要定时不断的从服务器端读取数据,因此,需要在客户端启动一个定时器,每隔一定的时候自动使用xmlhttp对象到服务器端下载别人的发言信息”。指点一下吧,什么才是对的。
把时间延长点 最少也1秒吧
用ajax,定个时间读数据.
50ms? 呵呵. 这是不可能的.
如果是WEB的用ajax会比刷整一页快很多.
我们现在已经实现是,就是在猜想现在数据库和服务器是压力是不是很大?怎么才能让浏览起变被动,response..response..response........
下一次请求在“上次的 T值乘上个系数 a ”秒数后发起,当然 T 太小或太大,
可以判断后适当修正。这样,正好服务器越忙,请求就自动减少。
系数 a 要经测试后取适当的植。
这个就困难了吧
怎么广播啊?
http都是无状态的.
只能是客户端请求服务器
服务器怎么广播给客户端?
如过是c/s的倒是可以.
只能这样的啊.
如果每个用户1分钟都去跑躺DB,这个数据库的并发请求是惊人的.
就算不是不读取数据库,服务器加载cgi动态程序的并发压力也会很大.解决办法就是,服务器后台每30-45秒读一次数据库生成静态xml或json文件.用户每一分钟用ajax读一次xml或者json.这样解决了数据库的并发问题,而且用户始终加载都是一个静态文件也减轻了apache load cgi的压力.
这个就困难了吧
-------------------
老大,你不会用 setTimeout() 吗?function Run()
{
//...
//...
setTimeout("Run()", T * a );
}setTimeout("Run()", 1000 );
顶你~
顶!!!
有新的数据进来就生成静态xml或json文件.
解决办法就是,服务器后台每30-45秒读一次数据库生成静态xml或json文件.用户每一分钟用ajax读一次xml或者json.
--------------------------------
在白天的高访问量时段,每秒钟几千上万次地读取xml,服务器会不会傻眼啊?万一访问的时候刚好删除替换文件怎么办 ,为什么新浪的NBA不到几秒就能刷新啊 访问量应该不小啊 他是怎么做的
xml静态化的工作是在后台服务器进行,然后分发到前台服务器,不用考虑文件替换的问题.
我说的30秒只是举个例子,可以适当的减少这个时间.数据库几百个并发都抗的住,何况只有这一个查询请求呢.
感谢mmyy(),不过 setTimeout()他只执行一次,我要做个时时显示的东西显然是不可能的。
50ms读取一次DB 和 50ms生成读取一次DB and 生成一次xml 让我无语...
http是无状态的! “当数据发生改变时页面无刷新动态改变”可以实现吗?(用Ajax)
同时还要考虑到“数据发生变化”面向的客户不同
客户A的数据变化了,但客户B未变,所以N个客户就要N个Xml文件
觉得初步流程大概是
服务器端:数据变化-〉触发器生成xml客户端:定时访问xml,访问成功的话,改变数据库标记、删除xml
考虑到实时性的话最好的办法就是flash的xmlsocket或者推技术。这样也比单纯的拉技术要好一些。然后才是settimeout
setTimeout可以一直执行一个事件的,
function main()
{
....
....
setTimeout("main()",5000);
}
w我觉得5秒比较合适
对于部分请求,可能它们数目不多,但是发生量非常大,在服务器端,为这些答复页面建立静态的内容,定时(或根据数据库的情况)刷新。
对于此类请求,服务器直接用静态内容来答复,而不是每次去刷数据库。这样的好处是,并发用户,不是很影响数据库,对于web服务器,也是个减压。
1、你的数据到底变化频率是怎么样的?如果按你说的是显示货物的,应该是不小于秒级的。
2、你的客户需要你以多块的频率显示新信息,换句话说,既便数据10ms更新一次,用户是否需要在10ms内就知道,还是30秒甚至更长的时间就可以,用户不需要关心这30秒内的变化。
安装我的理解,Web应用的时间数量级应该是秒级甚至到分钟级别的,一般只有嵌入的监测系统才会在ms级别,那不是Web上可以实现的。记住,需求决定技术,技术决定实现。
自己搜索一下 长连接 server push
如果是面向用户的,可以考虑加长定时触发时间,服务器做cache.我做过一个数据需要时时显示的页面.这个页面的日pv量大于1千万.页面的刷新时间是1分钟.
如果每个用户1分钟都去跑躺DB,这个数据库的并发请求是惊人的.
就算不是不读取数据库,服务器加载cgi动态程序的并发压力也会很大.解决办法就是,服务器后台每30-45秒读一次数据库生成静态xml或json文件.用户每一分钟用ajax读一次xml或者json.这样解决了数据库的并发问题,而且用户始终加载都是一个静态文件也减轻了apache load cgi的压力日pv一千万以上,太牛了
赞成这个做法
但是!请注意,如果每个用户拿到的数据都不是不一样的,你怎么处理
即便是同一个用户,在它选择某些选项的时候,数据也是不一样,
这就是一个组合了 用户N个 * M状态 * N状态 * L状态等等等
难道给每个用户的每种状态缓存一个json?当用户量不多说,只有10万的时候, 状态量有5种,每种状态用3种选项
那么你因该存储 100000 * 3 * 5 个json缓存 也就是1500000个,估计够呛,
一切讨论都是基于爱