Einfaches Beispiel mit Netty Socket.IO

fireGlurak

Mitglied
Hallo zusammen,

ich spiele gerade ein wenig mit der netty Socket.IO libary rum und habe dazu ein einfaches Beispiel erstellt.

Bin jetzt nun soweit, dass meine Spring Boot-Anwendung lauffähig ist und scheinbar der Socket.IO-server auch startet (zumindest wir mir das in den Logs so angezeigt <- 2023-12-29T02:13:48.824+01:00 INFO 27228 --- [ntLoopGroup-2-1] c.c.socketio.SocketIOServer : SocketIO server started at port: 8080)

Testweise versuche ich mich über den Broswser damit zu connecten, allerding scheint dies noch nicht wirklichzu klappen.

Hier erstmal der Code

Java:
import com.corundumstudio.socketio.SocketIOServer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class demo implements CommandLineRunner {

    @Autowired
    private SocketIOServer socketIOServer;

    public static void main(String[] args) {
        SpringApplication.run(demo.class, args);
    }

    @Override
    public void run(String... args) {
        socketIOServer.start();
    }
}


Java:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.corundumstudio.socketio.SocketIOServer;

@Configuration
public class SocketIoConfig {

    @Bean
    public SocketIOServer socketIOServer() {
        com.corundumstudio.socketio.Configuration config = new com.corundumstudio.socketio.Configuration();
        config.setHostname("localhost");
        config.setPort(8080);
        return new SocketIOServer(config);
    }
}

Java:
import com.corundumstudio.socketio.SocketIOClient;
import com.corundumstudio.socketio.listener.ConnectListener;
import org.springframework.stereotype.Component;

@Component
public class MyConnectListener implements ConnectListener {

    @Override
    public void onConnect(SocketIOClient client) {
        System.out.println("Client connected: " + client.getSessionId().toString());
    }
}

Wenn ich jetzt über den Browser aufrufe, dann ist meine Erwartungshaltung, dass onConnect getriggert wird und eine entsprechende Meldung geschrieben wird, aber das passiert leider nicht.

Was ich aber beim debuggen feststelle ist, dass das jedesein Thread erzeugt wird, wenn ich http://localhost:8080/ aufrufe.


debug.PNG

Also irgendwie scheint das schon anzukommen, aber wieso wird onConnect nicht aufgerufen.

Über Unterstützung wäre ich dankbar :)
 

KonradN

Super-Moderator
Mitarbeiter
Wieso sollte er denn onConnect aufrufen? Du setzt den ConnectionListener nicht. Wenn Du willst, dass der ConnectionListener aufgerufen wird, dann solltest Du den im Server auch setzen. Also etwas wie:

Java:
@Configuration
public class SocketIoConfig {
    
    @Autowired
    MyConnectionListener myConnectionListener;

    @Bean
    public SocketIOServer socketIOServer() {
        com.corundumstudio.socketio.Configuration config = new com.corundumstudio.socketio.Configuration();
        config.setHostname("localhost");
        config.setPort(8080);
        SocketIOServer server = new SocketIOServer(config);
        server.addConnectionListener(myConnectionListener);
        return server;
    }
}

Das ist jetzt so im Forum entstanden und kann daher Tippfehler enthalten und ist ungetestet.
 

fireGlurak

Mitglied
Hallo Konrad,

guter Punkt. Habe das mal angepasst

Java:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.corundumstudio.socketio.SocketIOServer;



@Configuration
public class SocketIoConfig {
    

@Autowired
MyConnectListener myConnectListener;

    @Bean
    public SocketIOServer socketIOServer() {
        com.corundumstudio.socketio.Configuration config = new com.corundumstudio.socketio.Configuration();
        config.setHostname("localhost");
        config.setPort(8080);
        SocketIOServer server = new SocketIOServer(config);
        server.addConnectListener(myConnectListener);
        return  server;
    }

Führt aber leider immer noch dazu, dass onConnect nciht getriggert wird :-/ Hast du noch eine Idee?
 

KonradN

Super-Moderator
Mitarbeiter
Hast du mal ein Beispielprojekt zur Hand, damit man sich nicht alles selbst aufbauen muss? Einfach per GitHub oder so teilen oder zur Not als ZIP hier im Forum ... oder per email an konrad at neitzel.de.
 

fireGlurak

Mitglied
Ich habe das Projekt mal als zip angehängt, da ich leider noch keine Git/GitHub integration bei meinem Projekt habe. Falls es irgendwelche Schwierigkeiten geben sollte, dann gerne mal bescheid geben. Dann sehe ich mal zu, dass ich das auf GitHub bekomme.

Vielen Dank schon mal für die Unterstützung :)
 

Anhänge

  • demo.zip
    73,1 KB · Aufrufe: 0

KonradN

Super-Moderator
Mitarbeiter
Also das Problem ist relativ einfach: Du hast da einen socket.io Server. Das ist kein universeller Server Socket für beliebige Verbindungen sondern ein Server, der ein spezielles Protokoll implementiert. Da muss ein entsprechender socket.io Client sich verbinden.

Introduction | Socket.IO
Although Socket.IO indeed uses WebSocket for transport when possible, it adds additional metadata to each packet.

Das OnConnect Event wird also erst kommen, nachdem der Client ein Handshake mit dem Server erfolgreich beendet hat und dann verbunden ist.

Ich habe mit Socket.IO aber noch nichts gemacht, daher kann ich da nicht wirklich mehr weiterhelfen.
 

fireGlurak

Mitglied
Also das Problem ist relativ einfach: Du hast da einen socket.io Server. Das ist kein universeller Server Socket für beliebige Verbindungen sondern ein Server, der ein spezielles Protokoll implementiert. Da muss ein entsprechender socket.io Client sich verbinden.

Introduction | Socket.IO


Das OnConnect Event wird also erst kommen, nachdem der Client ein Handshake mit dem Server erfolgreich beendet hat und dann verbunden ist.

Ich habe mit Socket.IO aber noch nichts gemacht, daher kann ich da nicht wirklich mehr weiterhelfen.
Hallo Konrad,

danke für den Hinweis. Ich habe mal über meine React-Native-Anwendung etwas herumprobiert und versucht eine Verbindung aufzubauen, aber bisher hatte ich noch kein Glück. Wenn ich über NodeJs einen socket.io-Server starte, dann funktioniert das problemlos :D

Naja ich werde mal weiter schauen...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E einfaches Beispiel zu MVC und Sinn V --> M ? Allgemeine Java-Themen 22
Gossi Threads Suche ein (einfaches) Beispiel Allgemeine Java-Themen 5
E Beispiel für ein möglichst einfaches Interface Allgemeine Java-Themen 22
V Ganz einfaches MVC-Beispiel?! Allgemeine Java-Themen 107
J Einfaches AspectJ Beispiel Allgemeine Java-Themen 2
reibi javax.crypto.SecretKey - Einfaches Beispiel gewünscht ;-) Allgemeine Java-Themen 2
temi Einfaches Eventhandling führt zu Brett vor Kopf Allgemeine Java-Themen 2
S Einfaches Programm programmieren Allgemeine Java-Themen 5
K Einfaches Array in 2 neue aufteilen. Allgemeine Java-Themen 2
A Lotto, einfaches Problem? Allgemeine Java-Themen 11
M einfaches Lagerverwaltungsapp Allgemeine Java-Themen 4
E Einfaches Problem mit Tomcat Allgemeine Java-Themen 18
D Einfaches Nutzen von Plugins mittels generischer Methode Allgemeine Java-Themen 3
W Einfaches Installer/setup tool für java programme das. Allgemeine Java-Themen 4
E (einfaches) Problem mit import und package (export) Allgemeine Java-Themen 4
T Einfaches Java Programm PHP5-fähig machen Allgemeine Java-Themen 19
V Suche einfaches JasperReports Tutorial Allgemeine Java-Themen 23
F Log4j2 SMTP Appender Beispiel Allgemeine Java-Themen 3
marcooooo Frage zum Beispiel im Anhang Allgemeine Java-Themen 16
O Suche größeres Beispiel für WebserverAnwendung mit Java Allgemeine Java-Themen 2
B MVC-Pattern größeres Beispiel Allgemeine Java-Themen 16
M Fabrik Methode, gutes Beispiel? Allgemeine Java-Themen 0
S Ist Java intrinsisch 'sicherer' als zum Beispiel C/C++ ? Allgemeine Java-Themen 2
D API - Beispiel + static member in inner (non static) class Allgemeine Java-Themen 2
Hotkey Beispiel für grosse Java Projekte Allgemeine Java-Themen 9
hdi Beispiel für EDT Violations gesucht Allgemeine Java-Themen 4
hdi Probleme mit Deadlock-Beispiel Allgemeine Java-Themen 11
W Frage zu Vererbung / konkretes Beispiel Allgemeine Java-Themen 4
M Frage zu Interfaces (Beispiel: Comparable) Allgemeine Java-Themen 13
E Exmatrikulations-Beispiel Allgemeine Java-Themen 8
G multithreading, concurrency conveyor belt beispiel Allgemeine Java-Themen 2
T Prototyp Beispiel Allgemeine Java-Themen 12
J Threads, Doppelpufferung --> Beispiel gefunden, geht net Allgemeine Java-Themen 16
F Installer für Windows schreiben! Hat jemand ein Beispiel? Allgemeine Java-Themen 8
K Brauche euren Lösungsweg zu einem File/IO-Beispiel Allgemeine Java-Themen 23
E Servlet-Beispiel gesucht Allgemeine Java-Themen 3
N Über einen Button in JavaFX ein Event über eine Pipeline schicken(Netty) Allgemeine Java-Themen 1

Ähnliche Java Themen

Neue Themen


Oben