- + 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 ネトゲで友達と一緒にやるために サーバーに対して同時刻にアクセスしたいんです
|
|