[[oktatas:programozás:java|< Java]] ====== Java Socket.IO könyvtár ====== * **Szerző:** Sallai András * Copyright (c) 2025, Sallai András * Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC BY-SA 4.0]] * Web: https://szit.hu ===== A Socket.IO ===== A Socket.IO elérhető Node.js és Java könyvtárként is. Így írhatunk egy szervert Node.js könyvtárral, klienst pedig Java vagy JavaFX-szel. * https://socket.io/ (2025) ===== Java függőség ===== ==== Kliens ==== A Socket.IO könyvtár elérhetősége: * https://central.sonatype.com/artifact/io.socket/socket.io-client (2025) Maven függőségként: io.socket socket.io-client 2.1.1 ==== Szerver Java nyelven ==== Ha szervert szeretnénk írni, Java nyelven könyvtár: * https://central.sonatype.com/artifact/io.socket/engine.io-server (2025) ===== Moduláris programok ===== Moduláris programoknál mint a JavaFX automatikus modulnév feloldást használunk: requires socket.io.client; requires engine.io.client; Ez persze **figyelmeztetést** generál, miszerint nem stabil az automatikus névfeloldás. ===== Egyszerű kliens ===== Függőség: io.socket socket.io-client 2.1.1 package hu.szit; import io.socket.client.IO; import io.socket.client.Socket; import io.socket.emitter.Emitter; public class Client { private Socket socket; public Client(String serverUrl) { try { socket = IO.socket(serverUrl); socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() { @Override public void call(Object... args) { System.out.println("Connected to server"); } }).on(Socket.EVENT_DISCONNECT, new Emitter.Listener() { @Override public void call(Object... args) { System.out.println("Disconnected from server"); } }).on("chat message", new Emitter.Listener() { @Override public void call(Object... args) { String msg = (String) args[0]; System.out.println("Received message: " + msg); } }).on(Socket.EVENT_CONNECT_ERROR, new Emitter.Listener() { @Override public void call(Object... args) { System.out.println("Connection error"); System.out.println(args[0]); } }); socket.connect(); } catch (Exception e) { e.printStackTrace(); } } public void sendMessage(String message) { if (socket != null && socket.connected()) { socket.emit("chat message", message); } else { System.out.println("Socket is not connected. Unable to send message."); } } } ===== Netty-socketio ===== A pom.xml részlete: com.corundumstudio.socketio netty-socketio 2.0.12 org.slf4j slf4j-simple 2.1.0-alpha1 Szerver Netty-socketio-val: package lan.zold; import com.corundumstudio.socketio.SocketIOServer; import com.corundumstudio.socketio.listener.ConnectListener; import com.corundumstudio.socketio.listener.DataListener; import com.corundumstudio.socketio.listener.DisconnectListener; public class Server { private SocketIOServer socketIoServer; public Server(SocketIOServer socketIoServer) { this.socketIoServer = socketIoServer; socketIoServer.addConnectListener(onConnected()); socketIoServer.addDisconnectListener(onDisconnected()); socketIoServer.addEventListener( "chat message", String.class, sendMessage() ); } private DataListener sendMessage() { return (client, data, ackSender) -> { System.out.println("Received message: " + data); client.sendEvent("chat message", data); }; } private ConnectListener onConnected() { return (client) -> { System.out.println("Client connected"); }; } private DisconnectListener onDisconnected() { return (client) -> { System.out.println("Client disconnected"); }; } public void start() { socketIoServer.start(); } public void stop() { socketIoServer.stop(); } } package lan.zold; import com.corundumstudio.socketio.Configuration; import com.corundumstudio.socketio.SocketIOServer; public class ServerHandler { public ServerHandler() { Configuration config = new Configuration(); config.setHostname("localhost"); config.setPort(3000); SocketIOServer socketIoServer = new SocketIOServer(config); Server server = new Server(socketIoServer); server.start(); } } package lan.zold; public class Main { public static void main(String[] args) { new ServerHandler(); } } ===== Linkek ===== * https://socketio.github.io/engine.io-server-java/using.html (2025) * https://trinopoty.github.io/socket.io-server-java/using.html (2025) * https://github.com/mrniko/netty-socketio (2025) Tesztelő: * https://piehost.com/socketio-tester (2025)