簡単な問題のために、AJAXを使用して、XX秒ごとに間隔要求を行うことによって、ユーザークライアントをリロードすることができます。サーバーは、クライアントがリロードするかどうかを判断するために使用できる最後のアクション時間を戻すことができます。クライアント
function getLocalLastAction() {
/* return timestamp of the last action on local */
}
function setLocalLastAction (time) {
/* Store the `time` to somewhere, ex: localStorage */
}
function checkLastAction() {
$.getJSON("/get_last_action_time", function (data) {
if (getLocalLastAction() < data.last_action_time) {
/* destroy the interval */
setLocalLastAction(data.last_action_time)
/* do the reload page */
} else {
/* do nothing */
}
})
}
// Check every 1 second, shouldn't be too short due to performance
var checking = setInterval(checkLastAction, 1000)
に
たとえば、コントローラ上の
# SomeController
def get_last_action_time
# Return the timestamp of the last action
render json: {last_action_time: "2017-12-29 10:00:42 UTC"}
end
ユーザAがアクションを行うときに、サーバlast_action_time
は、他のユーザのクライアントに再ロードされるため、変化しますほとんど1秒後。
これは古いものですが、単純なケースでは非常に簡単です。また、キャッシングアクションとともに実装すると、アプリのパフォーマンスは依然として受け入れられます。より複雑なケースでは、私は、@のyeuem1vannamの答えのおかげで、ここでの最終的なコードがある
この場合、AJAXを使用する方法が最も簡単です。しかし、Rails 5の 'ActionCable'(WebSocketの方法)も実装するのが非常に簡単です。可能であれば、試してみてください。 – yeuem1vannam
これを実証する簡単な例はありますか?私が見てきたすべてのAJAXチュートリアルではAJAXを使用しているため、クライアントのアクションはページ全体をロードせずにクライアントの独自のページを更新できます。 *他の*クライアントにリロードを送ろうとしています。これをもっと明確にするために質問を更新します。 –