DevExtreme Datagrid WebSocket Protocol

· Features

DevExtreme Data Grid von DevExpress ist ein leistungsstarkes Data Grid für JavaScript. Eine seiner Funktionen sind partielle Updates, mit denen sich ein Datensatz im Grid aktualisieren lässt, ohne die gesamte Seite neu zu laden. Üblicherweise wird das Update über das WebSocket-Protokoll empfangen.

Die sgcWebSockets-Bibliothek lässt sich mit dem DevExtreme Data Grid kombinieren, sodass du das Grid in Echtzeit ohne Leistungseinbußen aktualisieren kannst.

Push-API 

DevExtreme nutzt eine Push-API, um das Grid bei neuen Änderungen zu aktualisieren. Der Server reicht die Daten an die Clients weiter, üblicherweise über das WebSocket-Protokoll, und schickt die Änderungen anschließend ins Grid.

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 

Unten ein Beispiel für die Verwendung des sgcWebSockets-Dataset-Protokolls mit der DevExtreme-Push-API. Es zeigt einen WebSocket-Server, der allen verbundenen Clients Echtzeit-Aktienkurse liefert.

    // ... 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}]);
	  }
	});	 

Unten findest du die kompilierte DevExtreme Data Grid + sgcWebSockets-Demo für Windows.