Stock market app

Server

import com.socketio4j.socketio.*;
import java.util.*;
import java.util.concurrent.*;

/**
 * Stock Market Server (room-based)
 *
 * Each stockId is a room.
 * Clients subscribe to a stock to join that room.
 * Periodic price updates are sent only to subscribers.
 *
 * Example stocks: AAPL, GOOG, TSLA, MSFT
 */
public class StockMarketServer {
    public static void main(String[] args) {
        Configuration cfg = new Configuration();
        cfg.setHostname("localhost");
        cfg.setPort(9092);

        SocketIOServer server = new SocketIOServer(cfg);

        // subscribe to stock & join stock room
        server.addEventListener("stock:subscribe", String.class, (client, stockId, ack) -> {
            client.joinRoom(stockId);
            log.info("Client subscribed to => {}", stockId);
        });

        server.start();
        log.info("Stock Market Server running on :9092");

        // simulated real-time prices
        String[] stocks = { "AAPL", "GOOG", "TSLA", "MSFT" };
        Random random = new Random();
        ScheduledExecutorService exec = Executors.newScheduledThreadPool(1);

        exec.scheduleAtFixedRate(() -> {
            for (String s : stocks) {
                double price = 100 + random.nextDouble() * 50;
                server.getRoomOperations(s).sendEvent("stock:price", s, price);
            }
        }, 0, 1, TimeUnit.SECONDS);
    }
}

Client

Last updated

Was this helpful?