DevExtreme Datagrid WebSocket Protocol

· Özellikler

DevExpress'in DevExtreme Data Grid bileşeni, JavaScript için güçlü bir Data Grid'dir. Özelliklerinden biri, tüm sayfayı güncellemeden bir grid kaydını güncellemeye olanak tanıyan kısmi güncellemelerdir. Genellikle güncelleme WebSocket protokolü kullanılarak alınır.

sgcWebSockets kütüphanesi, DevExtreme Data Grid ile birlikte kullanılabilir ve performans kaybı olmadan Grid'i Gerçek Zamanlı güncellemeye olanak tanır.

Push API 

DevExtreme, yeni bir değişiklik alındığında Grid'i güncellemek için bir push API'si kullanır. Sunucu, verileri istemcilere genellikle WebSocket protokolünü kullanarak iletir ve ardından değişiklikleri grid'e gönderir (push).

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 

Aşağıda, sgcWebSockets Dataset Protokolünün DevExtreme Push API'si ile kullanımına dair bir örnek bulunmaktadır. Bu, bağlı tüm İstemcilere Gerçek Zamanlı Hisse Senedi Fiyatları sağlayan bir WebSocket sunucusudur.

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

Derlenmiş DevExtreme Data Grid + sgcWebSockets Windows demosunu aşağıda bulabilirsiniz.