11
SÜLEYMAN DEMİREL ÜNİVERSİTESİ SİBER GÜVENLİK LABORATUVARI Web Socket Halil ARI

Web Socket

Embed Size (px)

Citation preview

Page 1: Web Socket

SÜLEYMAN DEMİREL ÜNİVERSİTESİSİBER GÜVENLİK LABORATUVARI

Web Socket

Halil ARI

Page 2: Web Socket

WebSocket

WebSocket

• WebSocket TCP protokolü üzerinden çift yönlü veri haberleşmesini sağlayan veri transfer kanalıdır.

• HTML5 ile birlikte gelmiştir.

Page 3: Web Socket

WebSocket

WebSocket

• Web uygulamalarında HTTP protokolü kullanılır.• HTTP protokolü tek yönlü bir protokoldür.• Web uygulamalarının genel mantığında istemci(client) server’a request

gönderir.Server gelen request’i alır,değerlendirir istemciye response gönderir.

Page 4: Web Socket

WebSocket

WebSocket

• HTML önceden basit yapıdaydı.Yani gelen verileri düzgün biçimde göstermek yeterliydi.

• Zamanla javascript kullanımı yaygınlaştı ve html sayfaları daha dinamik olmaya başladı.

• Javascriptin yaygınlaşmasıyla beraber ajax kullanımı da arttı.• Ajax ile sayfalarca sürüklenmeden,sayfa yeneilemeden değişiklikler yapıldı.• Ajaxın dezavantajı ise ANLIK olmaması. • Anlık değişim için javascriptin ‘setInterval()’ komutu kullanılmaya başlandı.• Yani bu komut ile site içerisinde ki içerikler verilen saniye değeri ile

güncellenebiliyor.• Basit web uygulamalarında ya da az kullanıcı web uygulamalarında bu komut işe

yarayabiliyor.• Fakat bu yöntem real-time web uygulamalarında ya da çok kullanıcı uygulamalarda

siteyi yorar.

Page 5: Web Socket

WebSocket

WebSocket

• Bilindiği gibi server’da bir değişiklik olduğu zaman client bu değişiklikten haberi olmaz.Clientin değişiklikten haberi olması için server’a sürekli request gönderip yeni değişiklikleri alması gerekir.

• Burada devreye WebSocket girdi.• WebSocket TCP üzerinden çift yönlü haberleşmeyi sağlar.• Yani server üzerinde bir değişiklik olduğu zaman client’den request gelmesine

gerek kalmadan değişiklikleri client’a gönderir.• Sosyal platformların,real-time çok kullanıcılı uygulamaların artmasıyla beraber

WebSocket kullanımı çok fazla arttı.Ve siteyi yormadan,sayfalarca sürüklenmeden değişikliklerden istemcinin haberdar olmasını sağladı.

Page 6: Web Socket

WebSocket

WebSocket

• Websocket teknolojisi RFC 6455 ve Websocket Javascript API’dan oluşur.• Java EE 7 ile birlikte gelen JSR 356 speği sayesinde Java’da websocket

uygulamaları geliştirilebilir.• WebSocket server client’tan connection bekler.Connection sağlandığı zaman her iki

taraf arasında veri haberleşmesi yapılabilir.

Page 7: Web Socket

WebSocket

WebSocket

• WebSocket callback listener;1. onOpen = Connection sağlandığında çağırılır.2. onMessage = Server’a mesaj geldiği zaman çağırılır.3. onError = Server’da hata oluştuğu zaman çağırılır.4. onClose = WebSocket bağlantısı kesildiği zaman çağırılır.

Page 8: Web Socket

WebSocket

WebSocket

JAVA KODLARI@ServerEndpoint("/ws")public class WebSocketServer { private static final Set<Session> clients = Collections.synchronizedSet(new HashSet<Session>()); @OnOpen public void onOpen(Session session) { clients.add(session); }

Page 9: Web Socket

WebSocket

WebSocket

@OnMessage public void onMessage(String message, Session client) throws IOException, EncodeException { String Username = (String) client.getUserProperties().get("username"); if (Username == null) { client.getUserProperties().put("Username", message); String adminString = "Connected User: " + message; client.getBasicRemote().sendText(adminString); } else { Iterator<Session> iterator = clients.iterator(); while (iterator.hasNext()) { String test = Username + " : " + message; iterator.next().getBasicRemote().sendText(test); } } }

Page 10: Web Socket

WebSocket

WebSocket

@OnClose public void onClose(Session session) { clients.remove(session); }

Page 11: Web Socket

WebSocket

WebSocket

JAVASCRİPT KODLARI<script>

var wsUrl = "ws://localhost:8080/WebSocketExample/ws"; websocket = new WebSocket(wsUrl); websocket.onmessage = function processMessage(message) { textArea.value += message.data+ "\n"; }; function send() { websocket.send(messageText.value); messageText.value = ""; } </script>