DevExpress の DevExtreme Data Grid は、JavaScript 向けの強力なデータグリッドです。その機能の一つが部分更新で、ページ全体を更新せずにグリッドのレコードを更新できます。更新は通常 WebSocket プロトコルを使用して受信されます。
sgcWebSockets ライブラリは DevExtreme Data Grid と組み合わせて使用でき、パフォーマンスを落とさずにグリッドをリアルタイムで更新できます。
Push API
DevExtreme は新しい変更を受信したときにグリッドを更新するための Push API を使用しています。 サーバーは通常 WebSocket プロトコルを使用してクライアントにデータを渡し、グリッドに変更をプッシュします。
store.push([{ type: "insert", data: data }]); // if a new object is created
store.push([{ type: "update", data: data, key: key }]); // if an existing object is changed
store.push([{ type: "remove", key: key }]); // if an object is removed
以下は DevExtreme Push API と sgcWebSockets Dataset Protocol を組み合わせたサンプルです。接続しているすべてのクライアントにリアルタイムの株価情報を提供する WebSocket サーバーです。
// ... create a new websocket connection using dataset protocol
var ws = new sgcws_dataset("ws://127.0.0.1:5413");
// ... when the client connects to websocket server
ws.on('open', function(evt){
// first request all quotes
ws.subscribe_all();
// create the grid configuration
$("#gridContainer").dxDataGrid({
dataSource: store,
showBorders: true,
repaintChangesOnly: true,
highlightChanges: true,
columns: [
{dataField: "Id"},
{dataField: "Symbol"},
{
dataField: "Open",
dataType: "number",
format: "#0.####"
},
{
dataField: "High",
dataType: "number",
format: "#0.####"
},
{
dataField: "Low",
dataType: "number",
format: "#0.####"
},
{
dataField: "Last",
dataType: "number",
format: "#0.####"
}]
});
});
// ... synchronization starts
ws.on('sgcbeforesynchronize', function(evt) {
vSync = true;
});
// ... synchronization ends
ws.on('sgcaftersynchronize', function(evt) {
vSync = false;
});
// ... record update is received
// ... create a new JSON object with stock data information
// ... call push method to update the grid
ws.on('sgcdataset', function(evt){
var id = evt.dataset["ID"];
var symbol = evt.dataset["NAME"];
var open = evt.dataset["OPEN"].replace(',', '.');
var high = evt.dataset["HIGH"].replace(',', '.');
var low = evt.dataset["LOW"].replace(',', '.');
var last = evt.dataset["LAST"].replace(',', '.');
var change = evt.dataset["CHANGE"].replace(',', '.');
var quote = JSON.parse("{\"Id\":" + id + ", \"Symbol\":\"" + symbol + "\", \"Open\": " + open + ", \"High\": " + high + ", \"Low\": " + low + ", \"Last\": " + last + ", \"Change\": " + change + "}");
if (vSync == true)
{
store.push([{ type: "insert", key: quote.Id, data: quote, index: -1 }]);
}
else
{
store.push([{ type: "update", key: quote.Id, data: quote}]);
}
});
以下は Windows 向けにコンパイルされた DevExtreme Data Grid + sgcWebSockets デモです。
