Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the spectra-pro domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /home4/mahidhar/public_html/wp-includes/functions.php on line 6114
Java Web Sockets | tutorialQ

Java Web Sockets

Deep Dive into Java WebSockets

WebSockets provide a full-duplex communication channel over a single TCP connection, allowing for real-time data exchange between clients and servers. This is particularly useful for applications that require low latency, such as live chat applications, gaming, live notifications, and real-time data analytics.

Key Concepts in WebSockets

  1. WebSocket Protocol: Establishes a persistent connection between the client and server, allowing for two-way communication.
  2. WebSocket API: Java API for WebSocket (JSR 356) provides a standard for WebSocket communication in Java.

Setting Up WebSockets in Java

Java provides support for WebSockets through the Java API for WebSocket (JSR 356). Below are the steps to create a WebSocket server and client in Java using this API.

Example Use Cases

  1. Live Chat Application
  2. Real-time Notifications
  3. Live Data Feeds
  4. Online Gaming

Example: Live Chat Application

Setting Up the Project

  1. Add Maven Dependencies:
Java
   <dependency>
       <groupId>javax.websocket</groupId>
       <artifactId>javax.websocket-api</artifactId>
       <version>1.1</version>
   </dependency>
   <dependency>
       <groupId>org.glassfish.tyrus</groupId>
       <artifactId>tyrus-server</artifactId>
       <version>1.13.1</version>
   </dependency>
   <dependency>
       <groupId>org.glassfish.tyrus</groupId>
       <artifactId>tyrus-client</artifactId>
       <version>1.13.1</version>
   </dependency>
  1. WebSocket Server Endpoint:
Java
   import javax.websocket.OnClose;
   import javax.websocket.OnMessage;
   import javax.websocket.OnOpen;
   import javax.websocket.Session;
   import javax.websocket.server.ServerEndpoint;
   import java.io.IOException;
   import java.util.Collections;
   import java.util.HashSet;
   import java.util.Set;

   @ServerEndpoint("/chat")
   public class ChatServer {
       private static Set<Session> clients = Collections.synchronizedSet(new HashSet<>());

       @OnOpen
       public void onOpen(Session session) {
           clients.add(session);
           System.out.println("New session opened: " + session.getId());
       }

       @OnMessage
       public void onMessage(String message, Session session) throws IOException {
           System.out.println("New message from " + session.getId() + ": " + message);
           synchronized (clients) {
               for (Session client : clients) {
                   if (!client.equals(session)) {
                       client.getBasicRemote().sendText(message);
                   }
               }
           }
       }

       @OnClose
       public void onClose(Session session) {
           clients.remove(session);
           System.out.println("Session closed: " + session.getId());
       }
   }
  1. Deploying the Server:
  • Use an embedded server like Grizzly or include the endpoint in a Java EE application server like Tomcat or Jetty.
  • Example with Grizzly: import org.glassfish.tyrus.server.Server; public class WebSocketServer { public static void main(String[] args) { Server server = new Server("localhost", 8080, "/websockets", ChatServer.class); try { server.start(); System.out.println("Press any key to stop the server..."); System.in.read(); } catch (Exception e) { e.printStackTrace(); } finally { server.stop(); } } }
  1. WebSocket Client:
Java
   import javax.websocket.ClientEndpoint;
   import javax.websocket.ContainerProvider;
   import javax.websocket.OnMessage;
   import javax.websocket.Session;
   import javax.websocket.WebSocketContainer;
   import java.net.URI;

   @ClientEndpoint
   public class ChatClient {
       @OnMessage
       public void onMessage(String message) {
           System.out.println("Received: " + message);
       }

       public static void main(String[] args) {
           WebSocketContainer container = ContainerProvider.getWebSocketContainer();
           String uri = "ws://localhost:8080/websockets/chat";
           System.out.println("Connecting to " + uri);
           try {
               Session session = container.connectToServer(ChatClient.class, URI.create(uri));
               session.getBasicRemote().sendText("Hello, World!");
           } catch (Exception e) {
               e.printStackTrace();
           }
       }
   }

Example: Real-Time Notifications

WebSocket Server Endpoint for Notifications

Java
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

@ServerEndpoint("/notifications")
public class NotificationServer {
    private static Set<Session> clients = Collections.synchronizedSet(new HashSet<>());

    @OnOpen
    public void onOpen(Session session) {
        clients.add(session);
        System.out.println("New session opened: " + session.getId());
    }

    @OnMessage
    public void onMessage(String message, Session session) throws IOException {
        System.out.println("Broadcasting message: " + message);
        synchronized (clients) {
            for (Session client : clients) {
                client.getBasicRemote().sendText(message);
            }
        }
    }

    @OnClose
    public void onClose(Session session) {
        clients.remove(session);
        System.out.println("Session closed: " + session.getId());
    }
}

WebSocket Client for Notifications

Java
import javax.websocket.ClientEndpoint;
import javax.websocket.ContainerProvider;
import javax.websocket.OnMessage;
import javax.websocket.Session;
import javax.websocket.WebSocketContainer;
import java.net.URI;

@ClientEndpoint
public class NotificationClient {
    @OnMessage
    public void onMessage(String message) {
        System.out.println("Notification received: " + message);
    }

    public static void main(String[] args) {
        WebSocketContainer container = ContainerProvider.getWebSocketContainer();
        String uri = "ws://localhost:8080/websockets/notifications";
        System.out.println("Connecting to " + uri);
        try {
            Session session = container.connectToServer(NotificationClient.class, URI.create(uri));
            session.getBasicRemote().sendText("User has logged in.");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Example: Live Data Feeds

WebSocket Server Endpoint for Live Data

Java
import javax.websocket.OnClose;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import java.util.Timer;
import java.util.TimerTask;

@ServerEndpoint("/liveData")
public class LiveDataServer {
    private static Set<Session> clients = Collections.synchronizedSet(new HashSet<>());
    private static Timer timer = new Timer(true);

    static {
        timer.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                String data = "Live data update: " + System.currentTimeMillis();
                synchronized (clients) {
                    for (Session client : clients) {
                        try {
                            client.getBasicRemote().sendText(data);
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        }, 0, 1000);
    }

    @OnOpen
    public void onOpen(Session session) {
        clients.add(session);
        System.out.println("New session opened: " + session.getId());
    }

    @OnClose
    public void onClose(Session session) {
        clients.remove(session);
        System.out.println("Session closed: " + session.getId());
    }
}

WebSocket Client for Live Data

Java
import javax.websocket.ClientEndpoint;
import javax.websocket.ContainerProvider;
import javax.websocket.OnMessage;
import javax.websocket.Session;
import javax.websocket.WebSocketContainer;
import java.net.URI;

@ClientEndpoint
public class LiveDataClient {
    @OnMessage
    public void onMessage(String message) {
        System.out.println("Live data received: " + message);
    }

    public static void main(String[] args) {
        WebSocketContainer container = ContainerProvider.getWebSocketContainer();
        String uri = "ws://localhost:8080/websockets/liveData";
        System.out.println("Connecting to " + uri);
        try {
            Session session = container.connectToServer(LiveDataClient.class, URI.create(uri));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Example: Online Gaming

WebSocket Server Endpoint for Gaming

Java
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

@ServerEndpoint("/game")
public class GameServer {
    private static Set<Session> clients = Collections.synchronizedSet(new HashSet<>());

    @OnOpen
    public void onOpen(Session session) {
        clients.add(session);
        System.out.println("New session opened: " + session.getId());
    }

    @OnMessage
    public void onMessage(String message, Session session) throws IOException {
        System.out.println("Message from " + session.getId() + ": " + message);
        synchronized (clients) {
            for (Session client : clients

) {
                if (!client.equals(session)) {
                    client.getBasicRemote().sendText(message);
                }
            }
        }
    }

    @OnClose
    public void onClose(Session session) {
        clients.remove(session);
        System.out.println("Session closed: " + session.getId());
    }
}

WebSocket Client for Gaming

Java
import javax.websocket.ClientEndpoint;
import javax.websocket.ContainerProvider;
import javax.websocket.OnMessage;
import javax.websocket.Session;
import javax.websocket.WebSocketContainer;
import java.net.URI;

@ClientEndpoint
public class GameClient {
    @OnMessage
    public void onMessage(String message) {
        System.out.println("Game update: " + message);
    }

    public static void main(String[] args) {
        WebSocketContainer container = ContainerProvider.getWebSocketContainer();
        String uri = "ws://localhost:8080/websockets/game";
        System.out.println("Connecting to " + uri);
        try {
            Session session = container.connectToServer(GameClient.class, URI.create(uri));
            session.getBasicRemote().sendText("Player joined the game.");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Summary

WebSockets provide a powerful way to build real-time, interactive web applications. Java offers robust support for WebSockets through the Java API for WebSocket (JSR 356). By understanding the basic concepts and implementation, you can create various real-time applications such as live chat, real-time notifications, live data feeds, and online gaming.

  • WebSocket Protocol: Allows for persistent, full-duplex communication over a single TCP connection.
  • Java API for WebSocket (JSR 356): Provides a standard way to create WebSocket applications in Java.
  • Example Use Cases: Live chat applications, real-time notifications, live data feeds, and online gaming.

By leveraging WebSockets in Java, you can build efficient, low-latency applications that enhance user experience with real-time interaction.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Scroll to Top