トップページ > プログラム > 2015年11月27日 > YYaQ4CLl

書き込み順位&時間帯一覧

20 位/212 ID中時間01234567891011121314151617181920212223Total
書き込み数0000020000000001000000003



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
+ JavaScript の質問用スレッド vol.118 + [転載禁止]©2ch.net

書き込みレス一覧

+ JavaScript の質問用スレッド vol.118 + [転載禁止]©2ch.net
353 :デフォルトの名無しさん[sage]:2015/11/27(金) 05:10:46.27 ID:YYaQ4CLl
【環境】iOS?
【何をしたのか】Date getTimeによる時刻表期にズレが出てくる
【期待する結果】20msくらいの誤差で複数端末間(PC/スマホ問わず)の時刻を同期する
【サンプルコード】
時刻同期はNTPサーバを使って差分を考慮して行ってます

function getTime(){
$.ajax({
type: 'GET',
url: 'http://ntp-a1.nict.go.jp/cgi-bin/json?'+Date.now()/1000,
dataType: 'json',
success: function(json){
var nowDate = Date.now();
var latency = (nowDate-json.it*1000)/2;
var fixedTime = json.st*1000 + latency;
var localTIme = Date.now();
offset = fixedTime - localTIme;
}
});
}

やりたいことは複数端末間での精度の高い時刻同期です。
現状、出来ているといえば出来ているのですが、5分くらい放置していると
少しずつズレが出てきて目測ですが400msくらいのズレが発生しているように見えます
その場合、ページを更新するとまたピッタリになるのですが、
ページを更新せずにずっと時刻を同期し続けることは可能でしょうか?
+ JavaScript の質問用スレッド vol.118 + [転載禁止]©2ch.net
354 :デフォルトの名無しさん[sage]:2015/11/27(金) 05:13:39.89 ID:YYaQ4CLl
ちなみに、各端末での時刻表期は

var d = new Date(Date.now()+offset);
var h = ZeroFill(d.getHours(),2);
var m = ZeroFill(d.getMinutes(),2);
var s = ZeroFill(d.getSeconds(),2);
var u = ZeroFill(d.getTime()%1000,3);

各端末の内蔵時計にサーバーとの時刻とのズレを足し引きして
表示させています。Date.now()はnew Date().getTime()と同じです。

内蔵時計がずれていかなければ一回offsetを算出すれば
基本はずれることがないと思うのですが・・・
+ JavaScript の質問用スレッド vol.118 + [転載禁止]©2ch.net
360 :デフォルトの名無しさん[sage]:2015/11/27(金) 15:08:06.52 ID:YYaQ4CLl
>>356
いまoffsetを20秒ごとに更新するようにしているのですが
どうも一回スリープに入るとズレが生じるような気がしてきています
もうちょっと原因を検証してみます

>>357
サーバーの時刻を一度だして、それ以降はaudioContext.currentTimeを
取得しながら時刻を表示していくということですね
ちょっと一回トライしています!

>>358
setIntervalは20msで設定しています
20msなので人間が知覚できるほどのズレはないような気がしますが
現状は余裕で知覚できるほどのズレが発生しています

>>359
ネトゲで友達と一緒にやるために
サーバーに対して同時刻にアクセスしたいんです


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。