问题描述
集团有三个分公司,一个公司一台服务器,相同的文件在三个服务器上都有。现在想实现的功能是:一台电脑,无论在哪个公司,在登录页面先判断连接哪个服务器最快,这样,进入系统后,如果查看、下载文件,都从这个最快的服务器打开。目前的问题是:怎样判断哪个服务器连接最快?我在网上搜了一下,好像是说在每个服务器上放个文件,然后每个服务器下载一次,看看哪个下载最快。请问一下,有没有更好的实现方式,最好是能够一两秒钟内就能判断出一个服务器的速度。
解决方案
解决方案二:
别去用代码实现了,够折腾的,用cdn吧,或者直接弄个云储存。
解决方案三:
三个公司三台服务器?那还需要判断什么啊,直接硬性指定每个子公司应当访问自己局域网所在的服务器
解决方案四:
我也觉得这个需求完全是瞎折腾三个公司三个服务器,直接每个公司使用每个公司的服务器就OK了
解决方案五:
引用楼主zbdzjx的回复:
请问一下,有没有更好的实现方式,最好是能够一两秒钟内就能判断出一个服务器的速度。
贴出你的现有的方式的代码,先说明它到底有什么不好的。
解决方案六:
引用楼主zbdzjx的回复:
请问一下,有没有更好的实现方式,最好是能够一两秒钟内就能判断出一个服务器的速度。
贴出你的现有的方式的代码,先说明它到底有什么不好的。
解决方案七:
之前有请教过各位,因为各个分公司之间网络慢,所以每个分公司一个服务器,然后尽量调用自己服务器上的文件。后台会自动同步文件。我现在写的代码是根据用户所属的分公司来调用相应的服务器。但领导又说了:出差人员怎么办?让我想办法用代码来判断哪个服务器访问快来调用相应的服务器,说是某些下载网站就有显示你连接哪个下载服务器快,建议你从哪个服务器下载。引用1楼caicaihui的回复:
别去用代码实现了,够折腾的,用cdn吧,或者直接弄个云储存。
引用2楼starfd的回复:
三个公司三台服务器?那还需要判断什么啊,直接硬性指定每个子公司应当访问自己局域网所在的服务器
引用3楼yangmingxing980的回复:
我也觉得这个需求完全是瞎折腾三个公司三个服务器,直接每个公司使用每个公司的服务器就OK了
引用5楼sp1234的回复:
Quote: 引用楼主zbdzjx的回复:
请问一下,有没有更好的实现方式,最好是能够一两秒钟内就能判断出一个服务器的速度。贴出你的现有的方式的代码,先说明它到底有什么不好的。
解决方案八:
你们领导不是技术出身吧,就只会坑开发,那你就不要按用户分公司,而是按用户登录时的ip属于哪个分公司的ip来判断,如果都不属于的话,就按用户分公司,然后做个让用户自己选择切换到哪个分公司的功能不就可以了
解决方案九:
突然发现我真是个天才,就如上面说的,让用户自己选从哪个服务器下,然后默认选择的是用户所在的分公司,这样你们领导应该能接受了吧
解决方案十:
反正我们公司,对于出差这块就是适用VPN,速度肯定会慢很多
解决方案十一:
我发现你们领导是个奇才,这不是N年前CDN滴原型么,要是早个20年绝对拿个千万风投不过现在么,你只需要租用一个CDN加速服务就是了
解决方案十二:
引用10楼wanghui0380的回复:
我发现你们领导是个奇才,这不是N年前CDN滴原型么,要是早个20年绝对拿个千万风投不过现在么,你只需要租用一个CDN加速服务就是了
CDN这块不了解,刚简单搜索了一下。因为三个分公司是在内网中,应该不适用吧。
解决方案十三:
主要是大老板觉得慢、用的不爽,觉得每年用上百万养我们这些开发人员,居然是这个效果。我也觉得,实在没办法就只有让用户选择哪个服务器了。刚才在网上找了一段代码,说是可以测试网站的速度。在IE下测试了,达到理想的效果了。但用火狐和Chrome测试了一下,结果却是不正常。郁闷死了。引用8楼starfd的回复:
突然发现我真是个天才,就如上面说的,让用户自己选从哪个服务器下,然后默认选择的是用户所在的分公司,这样你们领导应该能接受了吧
引用9楼yangmingxing980的回复:
反正我们公司,对于出差这块就是适用VPN,速度肯定会慢很多
解决方案十四:
三台服务器速度相差很大吗,相差很大就去发ping测试回复速度啊
解决方案十五:
引用13楼xdashewan的回复:
三台服务器速度相差很大吗,相差很大就去发ping测试回复速度啊
是浏览器项目啊,当我没说
解决方案:
看老外的吧,对了上次给你的源码有点用吗?http://www.cprogramdevelop.com/4934430/
解决方案:
引用14楼xdashewan的回复:
Quote: 引用13楼xdashewan的回复:
三台服务器速度相差很大吗,相差很大就去发ping测试回复速度啊是浏览器项目啊,当我没说
就是想实现一个类似ping的功能。看看ping哪个IP更快。在网上找了一段代码,在IE下是正常的,在火狐和chrome下居然不对。太郁闷了。
解决方案:
引用15楼ajianchina的回复:
看老外的吧,对了上次给你的源码有点用吗?http://www.cprogramdevelop.com/4934430/
sorry,没用上。这个网址的内容我研究研究看。
解决方案:
负载均衡可以吗http://www.cnblogs.com/atree/p/windows_loadbalancer.html
解决方案:
引用16楼zbdzjx的回复:
就是想实现一个类似ping的功能。看看ping哪个IP更快。在网上找了一段代码,在IE下是正常的,在火狐和chrome下居然不对。太郁闷了。
谁知道你是怎么写的啊?!你在这个帖子中从来都没有贴过一行代码,也没有描述过一行设计思路,反而是说了好几遍别人做的有问题。你这样提问题,谁还敢真的告诉你该如何设计程序?
解决方案:
判断哪一个web服务返回更快,自然而然其操作就是“让每一个服务器都返回相同内容,探测哪一个最先返回”。而你在问题一开始就说人家的做法不合你的意思。谁知道你还想怎样写代码呢?
解决方案:
引用19楼sp1234的回复:
Quote: 引用16楼zbdzjx的回复:
就是想实现一个类似ping的功能。看看ping哪个IP更快。在网上找了一段代码,在IE下是正常的,在火狐和chrome下居然不对。太郁闷了。谁知道你是怎么写的啊?!你在这个帖子中从来都没有贴过一行代码,也没有描述过一行设计思路,反而是说了好几遍别人做的有问题。你这样提问题,谁还敢真的告诉你该如何设计程序?
OK,上代码:<html><head><title>网站连接速度测试</title><metahttp-equiv="content-type"content="text/html;charset=gb2312"></head><body>测试网站连接速度:<scriptlanguage="javascript">tim=1setInterval("tim++",10)b=1varautourl=newArray()autourl[1]="192.168.16.16"autourl[2]="192.168.168.13"autourl[3]="10.170.0.7"autourl[4]="192.168.17.25"functionbutt(){document.write("<formname=autof>")for(vari=1;i<autourl.length;i++)document.write("<inputtype=textname=txt"+i+"size=10value=测试中……>=》<inputtype=textname=url"+i+"size=40>=》<inputtype=buttonvalue=GOonclick=window.open(this.form.url"+i+".value)><br>")document.write("<inputtype=submitvalue=刷新></form>")}butt()functionauto(url){document.forms[0]["url"+b].value=urlif(tim>2000){document.forms[0]["txt"+b].value="链接超时"}else{document.forms[0]["txt"+b].value="时间"+tim/100+"秒"}b++}functionrun(){for(vari=1;i<autourl.length;i++)document.write("<imgsrc=http://"+autourl[i]+"/"+Math.random()+"width=1height=1onerror=auto('http://"+autourl[i]+"')>")}run()</script></body></html>
代码是在网上搜的,水平不够,没看太明白。其中,10.170.0.7是本公司的服务器,应该是最快的(ping<1ms);192.168.16.16和192.168.17.25是华南分公司的,速度应该差不多,位于中等速度(ping=36ms);192.168.168.13是台北分公司的,速度应该是最慢的(ping=213ms)。在IE6下效果如下图:在IE8下效果如下图:在firefox41下效果如下图:在chrome45下效果如下图:在IE6和IE8下显示的是正常的,10.170.0.7最快,但到了firefox和chrome,10.170.0.7反而是中间的了。
解决方案:
我觉得这种判断不是很有意义网速是一个动态值,你现在判断出A服务器的网速快,但不表示一直是它最快如果所有的客户端判断出A服务器最快,于是都从A上下载,结果A的网速被拉低,你还不如到其它两个服务器上去下载如果你判断出C当前速度最快,但实际上是因为当前C服务器处理的请求最多,但只要再过一两分钟,它的压力就会降下来,这时你放弃这笔“潜力股”,可能不是一个明智的选择。
解决方案:
兄弟,我给你出个主意吧,你不要判断哪个最快了,总感觉这样有些资源浪费。我还记得你上次的帖子,这次跟这个问题可以合并解决。1、搭建一个BT服务器,你可以同时建在web服务器上,其实这个不复杂,上传一个文件后,其他服务上就新建一个下载任务,p2p可以从主服务器下载的同时可以从其他节点服务器同时下载。2、主服务器(web服务器)生成下载种子,节点服务器只要p2p服务开着就能完成所有服务器的并行下载,如果VPN网络这样就可以了,如果不是就制成私有种子。
解决方案:
引用23楼ajianchina的回复:
兄弟,我给你出个主意吧,你不要判断哪个最快了,总感觉这样有些资源浪费。我还记得你上次的帖子,这次跟这个问题可以合并解决。1、搭建一个BT服务器,你可以同时建在web服务器上,其实这个不复杂,上传一个文件后,其他服务上就新建一个下载任务,p2p可以从主服务器下载的同时可以从其他节点服务器同时下载。2、主服务器(web服务器)生成下载种子,节点服务器只要p2p服务开着就能完成所有服务器的并行下载,如果VPN网络这样就可以了,如果不是就制成私有种子。
好的,谢谢。我研究研究看,主要还是要和领导讨论一下才行。
解决方案:
引用22楼hemowolf的回复:
我觉得这种判断不是很有意义网速是一个动态值,你现在判断出A服务器的网速快,但不表示一直是它最快如果所有的客户端判断出A服务器最快,于是都从A上下载,结果A的网速被拉低,你还不如到其它两个服务器上去下载如果你判断出C当前速度最快,但实际上是因为当前C服务器处理的请求最多,但只要再过一两分钟,它的压力就会降下来,这时你放弃这笔“潜力股”,可能不是一个明智的选择。
因为三个分公司是局域网,之间用VPN连接的,所以,速度差别很明显。就像我现在华东分公司,连接自己的服务器,速度可达10M/秒;而连接到华南的服务器,速度也就是几百K/秒;如果连接到台北服务器,那就惨了,只有几十K/秒。如果是一个几M的PDF档,放在我们的服务器上,点一下很快就打开了;放在华南服务器上,可能要十几秒,勉强能接受;如果是放在台北服务器上的,恐怕要一两分钟才打的开。
解决方案:
引用25楼zbdzjx的回复:
Quote: 引用22楼hemowolf的回复:
我觉得这种判断不是很有意义网速是一个动态值,你现在判断出A服务器的网速快,但不表示一直是它最快如果所有的客户端判断出A服务器最快,于是都从A上下载,结果A的网速被拉低,你还不如到其它两个服务器上去下载如果你判断出C当前速度最快,但实际上是因为当前C服务器处理的请求最多,但只要再过一两分钟,它的压力就会降下来,这时你放弃这笔“潜力股”,可能不是一个明智的选择。因为三个分公司是局域网,之间用VPN连接的,所以,速度差别很明显。就像我现在华东分公司,连接自己的服务器,速度可达10M/秒;而连接到华南的服务器,速度也就是几百K/秒;如果连接到台北服务器,那就惨了,只有几十K/秒。如果是一个几M的PDF档,放在我们的服务器上,点一下很快就打开了;放在华南服务器上,可能要十几秒,勉强能接受;如果是放在台北服务器上的,恐怕要一两分钟才打的开。
这样的话,可以通过网段来判断哪个服务器最快网管应该可以给你判断的依据
解决方案:
1、感觉你的这项目的问题,很多条件,没有提出来2、【23楼】的那个BT的思路非常棒,不过实现起来,小团队估计要被日惨了假如你设想“速度慢”的情况,是加载超过500K的文件,我觉得还是用【23楼】的思路比较靠谱比如,你一开始就同时连接3个分公司生成页面,在2--10秒后判断获取资源的量,少的两个就断开
解决方案:
引用26楼hemowolf的回复:
Quote: 引用25楼zbdzjx的回复:
Quote: 引用22楼hemowolf的回复:
我觉得这种判断不是很有意义网速是一个动态值,你现在判断出A服务器的网速快,但不表示一直是它最快如果所有的客户端判断出A服务器最快,于是都从A上下载,结果A的网速被拉低,你还不如到其它两个服务器上去下载如果你判断出C当前速度最快,但实际上是因为当前C服务器处理的请求最多,但只要再过一两分钟,它的压力就会降下来,这时你放弃这笔“潜力股”,可能不是一个明智的选择。因为三个分公司是局域网,之间用VPN连接的,所以,速度差别很明显。就像我现在华东分公司,连接自己的服务器,速度可达10M/秒;而连接到华南的服务器,速度也就是几百K/秒;如果连接到台北服务器,那就惨了,只有几十K/秒。如果是一个几M的PDF档,放在我们的服务器上,点一下很快就打开了;放在华南服务器上,可能要十几秒,勉强能接受;如果是放在台北服务器上的,恐怕要一两分钟才打的开。
这样的话,可以通过网段来判断哪个服务器最快网管应该可以给你判断的依据
我开始的想法就是根据网段来判断,但被经理给否决了,猜测是网段很多且很乱。目前感觉只有两个有效果的方案:1、就是用网段来判断;2、就是前面有高手提出的,下拉去选择连哪个服务器。BT的那个感觉难度高,不易实现。而我那个判断IP速度的,不稳定,说不定会判断错。
解决方案:
引用28楼zbdzjx的回复:
我开始的想法就是根据网段来判断,但被经理给否决了,猜测是网段很多且很乱。目前感觉只有两个有效果的方案:1、就是用网段来判断;2、就是前面有高手提出的,下拉去选择连哪个服务器。BT的那个感觉难度高,不易实现。而我那个判断IP速度的,不稳定,说不定会判断错。
前边的回帖我都没有看。但是这里明显看到你还是在无谓的纠结太多是非问题,这样你自己都没有什么主意,别人能给你说什么呢?如果纠结在一次访问服务器的那10几毫秒之间有没有出现什么意外,这是能够打包票的么?这有意义么?你就是要知道“当前哪一个服务器响应最快”就行了,你想要打包票说当前响应最快的服务器在以后也永远是最快的,那么买彩票吧。如果要判断“当前”拿一个服务器响应最快,还纠缠什么“不稳定”有什么意义?大不了你连续访问3次然后取平均值。总之你纠缠在这些层面,说明你没有决断、只知道纠结皮毛,你身边的人就算是懂可能也容易懒得帮你。
解决方案:
上面的回复我都没有看,不知道你后来又“研究”出了什么。我告诉你所谓“在每个服务器上放个文件,然后每个服务器下载一次,看看哪个下载最快”这个原理的实际:.首先它不需要下载什么文件,只要返回一、两个字符(例如"OK")就行了。.其次,客户端不会去等多有的测试都完成,而是并发多个测试,只是阻塞在第一个测试先完成就直接返回结果了,其它慢的测试根本不用管它了(让它自生自灭)所以要测试10个服务器哪一个更快,只要让它们都返回一个“OK”,只等第一个服务器在几毫秒之后有返回就结束了,而无须等待20秒钟或者更长时间。
解决方案:
引用楼主zbdzjx的回复:
我在网上搜了一下,好像是说在每个服务器上放个文件,然后每个服务器下载一次,看看哪个下载最快。请问一下,有没有更好的实现方式,最好是能够一两秒钟内就能判断出一个服务器的速度。
让每一个服务器都下载两个字母(“OK”),并判断哪一个是最快的。这都是毫秒级别的。但是你应该先判断一下自己为什么总是看不懂。
解决方案:
引用27楼puler的回复:
1、感觉你的这项目的问题,很多条件,没有提出来2、【23楼】的那个BT的思路非常棒,不过实现起来,小团队估计要被日惨了假如你设想“速度慢”的情况,是加载超过500K的文件,我觉得还是用【23楼】的思路比较靠谱比如,你一开始就同时连接3个分公司生成页面,在2--10秒后判断获取资源的量,少的两个就断开
呵呵,之前有另一个帖子,所以这个帖子说的内容不多。那就从头讲起:前两个月集团写了一套系统,几个分公司将各自的一些重要事项都放进去,包括一些相关的文件,还有一些签核流程等等。当时全部文件都是放在一个服务器上,运行了一段时间,有的人员及老板就反映文档上传及打开慢,有些文档太大了,会花费几分钟的时间,一天上传十几个文档,弄不好要一两个小时。而且老板打开大的文件,也可能要一两分钟时间下载。然后上面就决定,弄三台服务器,一个分公司一台,后台用DFS进行同步。前端是上传到自己的服务器,这样上传就会快了。如果是打开,先判断自己所在分公司的服务器上有没有此文件,如果有,就直接打开,如果没有,就从文件当时上传的服务器上打开。目前的问题就是如何判断这台电脑是在哪个分公司,然后连接哪台服务器来打开文件。最初我是按账号所在分公司来判断,上面说会有人出差到其他分公司;然后想按IP段来区分,上面又给否决了;最终上面提出是要看连接哪台服务器最快就从哪台服务器打开。
解决方案:
引用29楼sp1234的回复:
Quote: 引用28楼zbdzjx的回复:
我开始的想法就是根据网段来判断,但被经理给否决了,猜测是网段很多且很乱。目前感觉只有两个有效果的方案:1、就是用网段来判断;2、就是前面有高手提出的,下拉去选择连哪个服务器。BT的那个感觉难度高,不易实现。而我那个判断IP速度的,不稳定,说不定会判断错。前边的回帖我都没有看。但是这里明显看到你还是在无谓的纠结太多是非问题,这样你自己都没有什么主意,别人能给你说什么呢?如果纠结在一次访问服务器的那10几毫秒之间有没有出现什么意外,这是能够打包票的么?这有意义么?你就是要知道“当前哪一个服务器响应最快”就行了,你想要打包票说当前响应最快的服务器在以后也永远是最快的,那么买彩票吧。如果要判断“当前”拿一个服务器响应最快,还纠缠什么“不稳定”有什么意义?大不了你连续访问3次然后取平均值。总之你纠缠在这些层面,说明你没有决断、只知道纠结皮毛,你身边的人就算是懂可能也容易懒得帮你。
访问我现在分公司的服务器,速度是几M,访问华南的服务器,速度就是几百K,而访问台北的服务器,速度就只有几十K。基本上都是差一个数量级的。所以,是能很明显的区分出速度差异的。至于我说的“不稳定”,之前的那段代码,在我的电脑上测试的,Win7下,IE8是正确的,FF和Chrome是不正确的。另一台电脑在Win2003下面IE6是正确的。另一台电脑在Win10下测试IE11和Edge是不正确的。还有一台Win7下测试的,IE11、FF和Chrome居然都是正确的。在一台Win2008,IE8下面测试的也是正确的。所以按目前的测试来看,那段代码的结果只能认定为“不稳定”。
解决方案:
该回复于2015-10-31 23:42:49被版主删除
解决方案:
不想通过过深的技术层面,那就具体分析问题1、你要解决的问题,对应的人群,数量,解决方法A、B、C2、写申请,申请“外援”支持其实你要解决的不是全部人员的问题,你只是要解决部分“非常规用户”那只要在旁边悬浮“打开速度慢请按此按钮”,重新判断所需区域服务器获取,即可搞那么麻烦,要是领导不认可,你将其他的ABC方案一起拿出来讨论,看到成本,他们就会妥协的
解决方案:
领导硬是不喜欢用IP分段来判断,那就给项目分阶段嘛第一个阶段,暂时通过IP分段来获取第二个阶段,通过用户名,记录COOIKE区分,然后过慢的页面,通过SP123的思路直接判断不可以?第三个阶段,从第一个阶段开始,就着手开发智能判断模块做好几个阶段的成本预估,这样领导也好交差
解决方案:
改用域名访问,每个分公司把域名指向自己的服务器
解决方案:
可以用Nginx反向代理,应该可以搞定。
解决方案:
每次下载之前都用你的代码判断一下就好了。用得着那么纠结?