WebSocket Nedir?
WebSocket Nedir?
KAYNAK:https://kodcu.com/2016/11/websocket-nedir-2/
KAYNAK:https://kodcu.com/2016/11/websocket-nedir-2/
KAYNAK:https://kodcu.com/2016/11/websocket-nedir-2/
https://yazilimgunlugu.org/yeni-protokoller-web-sockets-nedir/
https://yazilimgunlugu.org/yeni-protokoller-web-sockets-nedir/
HTTP stateless request/response protokolüdür. Http protokülünün bu yapısı çok fazla etkileşim içerisinde olan web uygulamaları için uygun değildir. HTTP 1.1’den önce her request servera yeni bir connection yaratılırdı. HTTP 1.1 ile birlikte birden çok request/response çifti için tek bir tcp connection’ı kullanılabilir hale geldi. Bu yeni yapı http-keep alive ya da http persistent connection olarak adlandırılır. Http half duplex,tek yönlü bir protokoldür.Yani request’in yönü server’dan client’a doğrudur.
Server’da bir değişiklik olduğunda server bunu client’a bildiremez. Bu değişikliği algılayabilmek için polling, long polling ya da websocket gibi yapılar kullanılır. Polling belli aralıklarla belli zaman aralıklarında server’a request yapılır, server her request için response’u oluşturup gönderir. Bu yöntem çok fazla trafik yaratır.
Long polling, server requesti alır hemen response oluşturmaz yeni data oluşana kadar bekletir daha sonra response’u gönderir. Websocket tek bir tcp connectionu üzerinden çift yönlü ve full duplex mesajlaşmayı sağlar. Websocket ile birlikte clienttan request gelmesine gerek olmadan server’daki değişiklikler client’a iletilebilir hale geldi. Full duplex iki yönlü simultane iletişime izin verir.
Websocket teknolojisi RFC 6455 ve Websocket Javascript API’dan oluşur.
HTTP protokolüne uygun olmayan real time web uygulamarındaki karmaşık yapının basitleştirilmesini sağlar.Websocket’ler polling’e göre daha az band genişliğine ihtiyaç duyar.
HTTP protokolüne uygun olmayan real time web uygulamarındaki karmaşık yapının basitleştirilmesini sağlar.Websocket’ler polling’e göre daha az band genişliğine ihtiyaç duyar.
Java EE 7 ile birlikte gelen JSR 356 speği sayesinde Java’da websocket uygulamaları geliştirilebilir.Web client üzerinden websocket JavaScript API ile websocket serverlara bağlantı kurulabilir. Websocket server, client’tan connection’ı bekler.Client ve server arasında kurulan kalıcı bağlantı sayesinde her iki taraf birbirine data gönderebilir hale gelir.
Hem server hem de client tarafında callback listenerlar mevcuttur.Bunlara bakacak olursak:
onOpen -> Connection ilk kurulduğunda çağrılır.
onMessage -> Yeni bir mesaj geldiğinde çağrılır.
onError -> onOpen, onClose ,onMessage ‘dan birinde hata olduğunda çağrılır.
onClose -> Connection kapatıldığında çağrılır.
En basit haliyle bir websocket örneği yapalım.Bu örnekte html sayfamızdaki textbox’a girilen veriyi websocket aracılığıyla server’a gönderip cevabını alalım.Örneğin çalışabilmesi için server’ınızın websocket desteği olması gerekiyor.Bu örneği çalıştırmak için tomcat8 kullanıldı.
onMessage -> Yeni bir mesaj geldiğinde çağrılır.
onError -> onOpen, onClose ,onMessage ‘dan birinde hata olduğunda çağrılır.
onClose -> Connection kapatıldığında çağrılır.
En basit haliyle bir websocket örneği yapalım.Bu örnekte html sayfamızdaki textbox’a girilen veriyi websocket aracılığıyla server’a gönderip cevabını alalım.Örneğin çalışabilmesi için server’ınızın websocket desteği olması gerekiyor.Bu örneği çalıştırmak için tomcat8 kullanıldı.
package com.ws;
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
@ServerEndpoint("/ws")
public class WebSocketServer {
private Session session;
@OnOpen
public void connect(Session session) {
this.session = session;
}
@OnClose
public void close() {
this.session = null;
}
@OnMessage
public void message(String message) {
System.out.println("Message = "+message);
this.session.getAsyncRemote().sendText(message + " received");
}
}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Web Socket Test Page</title>
</head>
<body>
<script type="text/javascript">
var wsUrl = "ws://localhost:8080/Websocket/ws";
var webSocket;
function init() {
webSocket = new WebSocket(wsUrl);
webSocket.onopen = function(evt) {
onOpen(event)
};
webSocket.onclose = function(evt) {
onClose(event)
};
webSocket.onmessage = function(evt) {
onMessage(event)
};
webSocket.onerror = function(evt) {
onError(event)
};
}
function onOpen(event){
Console.log("OnOpen Event");
}
function onClose(event) {
Console.log("OnClose Event");
}
function onError(event) {
Console.log("OnError Event");
}
function sendMessage() {
webSocket.send(textBox.value);
}
function onMessage(event) {
alert(event.data);
}
window.addEventListener("load", init, false);
</script>
<textarea id="textBox" rows="5" cols="20"></textarea>
<button onclick="sendMessage();">Send Message</button>
</body>
</html>
Kaynak kodlara GitHub üzerinden erişebilirsiniz
Yorumlar
Yorum Gönder