我编写了一个简单的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)));
}
});
}
}
答案 0 :(得分:0)
在两个Verticle部署之间休眠。 客户端Verticle可能比服务器Verticle变得更快。