The tcp server socket handler don't waiting for the result of the vertical and just close the socket.How to control it?

Viewed 8

I'm writing a simple tcp server for short connection.

Message format is liked this.Fixed 5 prefix is for length.The rest is the message.

I have two vertical.

One handling the tcp request, receive message and parsed by RecordParser.Then get the eventBus and send the message to it.

Another vertical just consume and reply it.

The question is.Tcp client can't receive the result.I know the eventBus.request() is async.But don't know how to control it,just let the socket waiting for the result.

First vertical is liked this:

    @Override
    public void start() throws Exception {
        EventBus eventBus = vertx.eventBus();

        NetServer netServer = vertx.createNetServer();

        final int[] size = {-1};

        netServer.connectHandler(socket -> {
            RecordParser parser = RecordParser.newFixed(5);

            parser.handler(buffer -> {
                if (-1 == size[0]) {
                    size[0] = Integer.parseInt(buffer.toString());
                    parser.fixedSizeMode(size[0]);
                } else {
                    eventBus.request("message.id", buffer.toString(), reply -> {
                        socket.write((String) reply.result().body()).onComplete(event -> socket.end());
                    });
                }
            });

            socket.handler(parser);
        });

        netServer.listen(1234);
    }
0 Answers
Related