首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >服务器时间和客户时间-差异?

服务器时间和客户时间-差异?
EN

Stack Overflow用户
提问于 2012-08-19 10:03:39
回答 1查看 3K关注 0票数 1

我已经编写了一个代码,它告诉我数据包从server to client到达所需的时间,以及从client to server to client返回的总时间。这是我的密码。

客户端:

代码语言:javascript
运行
复制
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Ping</title>
<script src="/socket.io/socket.io.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script>
$(document).ready(function(e) {

    var socket = io.connect('http://pingme.jit.su:80/', {secure: false});
    $('#button').click(function(e) {
        e.preventDefault();
        $(this).attr('disabled','disabled');
        var time = (new Date()).getTime();
        socket.emit('ping', time);  
    });
    socket.on('pong', function(data)    {
        var time2 = (new Date()).getTime();
        var lat = time2 - data.server;
        var roundtrip = time2 - data.init;
        var str = '<br><br><strong>From Server</strong>: '+lat+' ms<br><strong>Roundtrip</strong>: '+roundtrip+' ms<br><br>';
        $('#res').prepend(str);
        $('#button').removeAttr('disabled');
    }); 
});
</script>
</head>
<body style="margin:0;">
<input type="button" name="Button" id="button" value="Latency">
<div id="res"></div>
</body>
</html>

服务器端:

代码语言:javascript
运行
复制
var app = require('http').createServer(handler)
, io = require('socket.io').listen(app)
, fs = require('fs')
, path = require('path')
, url = require("url")
, querystring = require("querystring");

app.listen(8080);

io.configure('development', function(){
  io.set('transports', ['xhr-polling']);
});

io.configure('production', function(){
  io.set('transports', ['xhr-polling']);
});

var static = require('node-static');
var fileServer = new static.Server('.', { cache: false });

function handler (request, response) {

    var pathname = url.parse(request.url).pathname;
    if(pathname == '/') {
        pathname = '/app.html';
    }   
    request.addListener('end', function () {
        fileServer.serveFile(pathname, 200, {}, request, response, function(err, result)    {
            if(err) {
                console.log(err);
                console.log(err.status);
            }
            else
                console.log(result);                
        });
    });
}

io.sockets.on('connection', function (socket) {
    socket.on('ping',function(data) {
        var time = (new Date()).getTime();
        socket.emit('pong', {server:time, init:data});
    });

});

这个问题虽然在本地运行良好,但显示了以下输出:

代码语言:javascript
运行
复制
From Server: 4 ms
Roundtrip: 11 ms

From Server: 10 ms
Roundtrip: 15 ms

当我在Nodejitsu上部署它之后运行时,会得到异常的结果。它给了我以下输出:

代码语言:javascript
运行
复制
From Server: 2223 ms
Roundtrip: 956 ms

From Server: 2265 ms
Roundtrip: 915 ms

这是怎么可能的包需要更多的时间从服务器的旅行比整个往返?我认为这是由于服务器和客户端之间的时间差造成的。你觉得那是什么?

EN

回答 1

Stack Overflow用户

发布于 2012-08-19 10:07:21

发生这种情况的原因有很多。但是,如果您想测试您的编程,那么应该将结果与类似traceroute (linux上的命令)的结果进行比较。

在当地,事情总是会变得更快。当你访问局域网之外的东西时,你会得到各种各样的开销和延迟。

一个简单的曲棍球可能会解释很多。另外,你也可以从这里开始:

http://www.traceroute.org/

//编辑//

有很多方法可以做到这一点,请查看以下链接:

Latency / Ping test from Browser

但基本原则是,您发送多条消息。您可以使用您的第一个请求-响应消息来计算时间。我对大约1000个客户端这样做,我所做的就是跟踪每个客户端的。一旦计算偏移量(即客户端比服务器提前1小时),则可以从延迟计算中减去偏移量。检查这个php函数

http://php.net/manual/en/function.timezone-offset-get.php

这至少可以帮助你找到正确的方向:) --如果你需要更多的帮助,请告诉我。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12025682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档