WebSocketServer Undertow

Nisbo

Bekanntes Mitglied
Servus,

ich stehe mal wieder auf dem Schlauch, diesmal geht es darum einen WebSocketServer aufzusetzen (Server und Client beide Local)

Der Client (Socket.IO) funktioniert, nutze den auch bei anderen WebSockets, wenn ich verbinden möchte bekomme ich bei EVENT_CONNECT_ERROR

Code:
 io.socket.engineio.client.EngineIOException: websocket error

hier mein Code der wie gesagt bei anderen funktioniert

Java:
       System.out.println("Start: ");
        IO.Options opts = new IO.Options();
        opts.path = "/myapp";
        opts.port = 8080;
        opts.transports = new String[] {WebSocket.NAME};
       
        socket = IO.socket("http://127.0.0.1", opts);
       
        socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
          @Override
          public void call(Object... args) {
              System.out.println("EVENT_CONNECT");
              socket.send("42");
          }
        });
       
        socket.on(Socket.EVENT_MESSAGE, new Emitter.Listener() {
            @Override
              public void call(Object... args) {
                  System.out.println("EVENT_MESSAGE");
            }
        });

        socket.on(Socket.EVENT_CONNECT_ERROR, new Emitter.Listener() {
            @Override
              public void call(Object... args) {
                  System.out.println("EVENT_CONNECT_ERROR" + args[0].toString());
            }
        });
       
        socket.on("mqtt", new Emitter.Listener() {
            @Override
              public void call(Object... args) {
                  System.out.println("EVENT_MESSAGE" + args[0].toString());
            }
        });
       
        socket.on(Socket.EVENT_DISCONNECT, new Emitter.Listener() {
              @Override
              public void call(Object... args) {
                  System.out.println("EVENT_DISCONNECT");
              }

        });
        socket.connect();

Als WebSocketServer setze ich Undertow ein (Netty wollte nicht so wie ich :D)
https://github.com/undertow-io/undertow

der Server startet auch

Code:
Jul 31, 2017 2:07:45 PM org.xnio.Xnio <clinit>
INFO: XNIO version 3.4.6.Final
Jul 31, 2017 2:07:46 PM org.xnio.nio.NioXnio <clinit>
INFO: XNIO NIO Implementation Version 3.4.6.Final

hier der Code:

Java:
Undertow server = Undertow.builder()
                    .addHttpListener(8080, "localhost")
                    .setHandler(path()
                            .addPrefixPath("/myapp", websocket(new WebSocketConnectionCallback() {

                                @Override
                                public void onConnect(WebSocketHttpExchange exchange, WebSocketChannel channel) {
                                    channel.getReceiveSetter().set(new AbstractReceiveListener() {

                                        @Override
                                        protected void onFullTextMessage(WebSocketChannel channel, BufferedTextMessage message) {
                                            System.out.println("Connect Msg ");
                                            WebSockets.sendText("Test", channel, null);
                                            WebSockets.sendText(message.getData(), channel, null);
                                        }
                                    });
                                    channel.resumeReceives();
                                }
                            })))
                    .build();
    server.start();

wie der Server selbst dann später die Daten bekommt habe ich noch nicht wirklich verstanden, aber soweit bin ich auch noch gar nicht da sich der Client nicht verbindet.

Mit dem Beispielcode für den http Server (um zu testen ob überhaupt as geht) hatte ich erfolg

Java:
Undertow server = Undertow.builder()
                .addHttpListener(8080, "localhost")
                .setHandler(new HttpHandler() {
                    @Override
                    public void handleRequest(final HttpServerExchange exchange) throws Exception {
                        exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/plain");
                        exchange.getResponseSender().send("Hello World");
                    }
                }).build();
        server.start();

Was ich später im Endeffekt machen möchte ist Daten via MQTT zu empfangen (das geht auch alles) dort die wichtigen raus zu filtern und dann per WebSocket zu verteilen. Sprich wenn die Message den Anforderungen entspricht wird sie weitergereicht, nur halt per WS.

Ja ich weiß langer Text, aber evtl kann mich jemand in die richtige Richtung stupsen.
 

looparda

Top Contributor
Sobald ich HTTP im Spiel habe und mir nicht sicher bin was zwischen Server und Client passiert benutze ich gerne einen HTTP Proxy wie Charles. Oder ich schicke erstmal den Request an eine Seite wie HTTPBin um sicherzustellen, dass es nicht am eigenen Server liegt.
Ich kenne diese Library nicht aber auf den ersten Blick musst du vielleicht die Content-Length setzen, wie ich in den tests gesehen habe.
 

Neue Themen


Oben