Vertx Websocket:AWS上的连接拒绝错误

时间:2017-10-23 08:00:00

标签: amazon-web-services websocket vert.x

我编写了一个简单的Websocket应用程序,它有一个服务器Verticle和一个客户端Verticle。它在我的本地Windows系统(Eclipse)上运行得非常好。在AWS EC2(Ubuntu)上部署时,问题就开始了。虽然服务器Verticle似乎没有问题并且侦听分配的端口,但是当在同一系统上运行的Websocket客户端Verticle尝试连接到服务器时,它会从服务器获取连接被拒绝消息。 我甚至通过浏览器检查从外部系统连接到Websocket - 即使连接失败也是如此。 但是,当我在同一台机器上运行Http Server Verticle时,我没有问题连接到它并从服务器接收消息。 我已在AWS实例的所有端口上启用所有传入流量。出了什么问题?请帮忙。

以下是代码:

import io.vertx.core.AbstractVerticle;
import io.vertx.core.Future;
import io.vertx.core.Handler;
import io.vertx.core.Vertx;
import io.vertx.core.http.HttpClient;
import io.vertx.core.http.HttpServer;
import io.vertx.core.http.ServerWebSocket;
import io.vertx.core.http.WebSocket;


public class WebSocketServerApp {

    public static void main(String[] args) {
        Vertx vertx = Vertx.vertx();
        vertx.deployVerticle(new WebSocketServerVerticle());
        vertx.deployVerticle(new WebSocketClientVerticle("A"));
    }
}


class WebSocketServerVerticle extends AbstractVerticle {

    @Override
    public void start(Future<Void> startFuture) {
        HttpServer httpServer = vertx.createHttpServer();
        httpServer.websocketHandler(new Handler<ServerWebSocket>() {

            @Override
            public void handle(ServerWebSocket event) {
                System.out.println("Request received: " +event.binaryHandlerID());
                event.writeTextMessage("Message from WS server");
            }
        }).listen(9999);
    }
}

class WebSocketClientVerticle extends AbstractVerticle {

    String name;

    public WebSocketClientVerticle(String name) {
        this.name = name;
    }

    @Override
    public void start(Future<Void> startFuture) {
        HttpClient client = vertx.createHttpClient();
        client.websocket(9999, "localhost", "", new Handler<WebSocket>() {
            @Override
            public void handle(WebSocket ws) {

                System.out.println("WS Client: "+ ws.textMessageHandler(msg-> System.out.println("Received: "+msg)));
            }
        });
    }
}

1 个答案:

答案 0 :(得分:0)

在两个Verticle部署之间休眠。 客户端Verticle可能比服务器Verticle变得更快。