2016-10-08 11 views
1

node.jssocket.ioでチャットを作成しました。チャットは、サーバーとクライアントのDate.now()に違いがあります

ユーザーがメッセージを送信すると、DOMに直接挿入してメッセージをサーバーに送信するため、他のすべてのクライアントに送信できます。

問題は、サーバー上のDate.now()で設定されたタイムスタンプが、クライアントで設定されたタイムスタンプとまったく同じコマンドで異なると思われることです。

これにより、後で送信されたメッセージに以前に送信されたメッセージよりも前にタイムスタンプが表示されるため、インターフェイスが少し奇妙になります。

ユーザーがチャットルームに参加し、新しいメッセージが追加されたときにこの差異を差し引いたときの時間差を計算するのが1つの解決策ですが、これが本当に必要か、これを一般的な方法で解決する必要がありますか?これはまた、タイムゾーンなどに対処する解決策かもしれませんか?

+1

異なるコンピュータのクロックが異なる - おそらく、サーバーでメッセージを受信したときにタイムスタンプを使用していますか?時間差アプローチは役に立ちますが、クライアントからサーバーへメッセージを配信する時間が一定でないという事実によって複雑になります。 –

+0

しかし、ユーザーのメッセージをサーバーに送信する前に追加する必要があります。 Facebookのようなウェブサイトはどのようにチャットでそれをしていますか? – mortensen

+0

私はクライアントがサーバーにメッセージを送信し、サーバーのタイムスタンプを受信し、そして誰もがサーバーへの到着時刻とともにそれらを見ると思う。 –

答えて

0

クライアントとサーバーの間のタイムゾーンが異なる可能性があります。世界中の複数のユーザーとは連携しません。この1つは参考になります:あなたが考慮しなければならないので、あなたがすぐにDOMにタイムスタンプを付加した場合、また

How to ignore user's time zone and force Date() use specific time zone

し、サーバーから再び日付を取得するには、どのような場合に差があるだろう要求がサーバーに到達する必要がある時間。

+0

'Date.now()'はUnixのタイムスタンプを返します。タイムスタンプはありません。 – robertklep

+0

@robertklep各ユーザーのブラウザのタイムゾーンに依存しませんか?また、ノード上ではサーバーの構成に依存しませんか? –

+0

いいえ、タイムスタンプは常にUTCからの相対値です。 [この質問とその回答](http://stackoverflow.com/questions/23062515/do-unix-timestamps-change-across-timezones)も参照してください。 – robertklep

関連する問題