Struts2フレームワークを使用してWebアプリケーションを実行しています。ユーザーのログイン後、ユーザーの現在のステータスに関するダッシュボードを表示します。ダッシュボードUI(JSP)を表示するために、私はバックエンド(Mysql)から情報を取得するために使用しました。ページの読み込み時に、たとえば「getDashboardInformation」(Jquery Ajax経由)などのリクエストをトリガーして、ユーザーの現在のダッシュボード情報を取得し、その情報をUIに表示します。
したがって、ページが読み込まれたときにのみリクエストがトリガーされます。ここで、ユーザーのダッシュボード情報がmysqlテーブル(ダッシュボードに関連する)で更新/挿入されるたびにリクエストをトリガーしたいと思います。
次に、ページを更新する必要なしに、ダッシュボード情報(例:cricinfo-スコアがUIで自動的に更新される)を生き生きと取得するにはどうすればよいですか。
これにはWebソケットを使用できますが、Webソケットは新しいテクノロジーであり、ブラウザーがサポートされている場合は問題が発生する可能性があることに注意してください。
Webソケットは、ある種のイベントリスナーです。 socket.onopen
- eventのようなサーバーからのイベントを待っています。
したがって、クライアント側でこれを行うには、次のようにします。
まずはレスポンスデータを扱う関数があります...
function handleResponseData(data) {
// data could be JSON string for example
alert(data);
}
次に、データ処理のWebソケットバージョンを作成します...
function doSocket() {
socket = new WebSocket("ws://echo.websocket.org/");
socket.onmessage = function(event) {
handleResponseData(event.data);
}
}
そして、代替バージョン...
function doAlternative() {
window.setInterval(function() {
var xmlhttp;
if(window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
}
else {
// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function() {
if(xmlhttp.readyState==4 && xmlhttp.status==200 &&
// Also check if server responded with data:
xmlhttp.responseText)
{
handleResponseData(xmlhttp.responseText);
}
}
xmlhttp.open("GET","echo.websocket.org",true);
xmlhttp.send();
}, 2000);
}
あとは、Webソケットがサポートされているかどうかを確認し、適切な関数を実行するだけです。
function initialize() {
if(typeof(WebSocket) == "function") {
doSocket();
}
else {
doAlternative();
}
}
window.addEventListener("load", initialize, false);
このコードをクライアント側で使用すると、定期的な更新を処理できるようになります。ただし、両方のバージョンを実行している限り、これを処理するためにサーバー側で2つのメカニズムが必要になることに注意してください。
最後に、Webソケットに関する詳細情報 here を取得できます。