[[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)