Vert.x 3 使用 SockJS - 无法建立连接
Vert.x 3 with SockJS - unable to establish connection
我正在尝试 运行 关于使用 Vert.x 3.0.0 和 SockJS 0.3.4 的 websockets 功能的简单示例(我正在使用 groovy)。
groovy verticle 如下所示:
import io.vertx.groovy.ext.web.Router
import io.vertx.groovy.ext.web.handler.sockjs.SockJSHandler
def router = Router.router(vertx)
def sockJSHandler = SockJSHandler.create(vertx, [heartbeatInterval: 2000])
sockJSHandler.socketHandler({ sockJSSocket ->
sockJSSocket.handler(sockJSSocket.&write)
})
router.get("/").handler({req -> req.response().sendFile('ws.html')})
router.route("/myapp").handler(sockJSHandler)
vertx.createHttpServer().requestHandler(router.&accept).listen(9090)
在客户端 (ws.html):
<html>
<head><title>Web Socket Test</title></head>
<body>
<script src="http://cdn.jsdelivr.net/sockjs/0.3.4/sockjs.min.js"></script>
<script>
var sock = new SockJS('http://localhost:9090/myapp');
sock.onopen = function() {
console.log('open');
};
sock.onmessage = function(e) {
console.log('message', e.data);
};
sock.onclose = function() {
console.log('close');
};
function send(message) {
sock.send(message);
}
</script>
<form onsubmit="return false;">
<input type="text" name="message" value="Hello, World!"/>
<input type="button" value="Send Web Socket Data" onclick="send(this.form.message.value)"/>
</form>
</body>
</html>
但是,当客户端尝试建立连接时,它会请求 URL http://localhost:9090/myapp/info
,这会导致 404。我知道它是 SockJS 协议的一部分,但为什么不呢?服务器端 Verticle 不处理它吗?我应该自己处理 "info" 个请求吗?
我做错了什么?
如果你看看给定的例子
您需要在通配符地址
上注册一个SockJSHandler
我正在尝试 运行 关于使用 Vert.x 3.0.0 和 SockJS 0.3.4 的 websockets 功能的简单示例(我正在使用 groovy)。
groovy verticle 如下所示:
import io.vertx.groovy.ext.web.Router
import io.vertx.groovy.ext.web.handler.sockjs.SockJSHandler
def router = Router.router(vertx)
def sockJSHandler = SockJSHandler.create(vertx, [heartbeatInterval: 2000])
sockJSHandler.socketHandler({ sockJSSocket ->
sockJSSocket.handler(sockJSSocket.&write)
})
router.get("/").handler({req -> req.response().sendFile('ws.html')})
router.route("/myapp").handler(sockJSHandler)
vertx.createHttpServer().requestHandler(router.&accept).listen(9090)
在客户端 (ws.html):
<html>
<head><title>Web Socket Test</title></head>
<body>
<script src="http://cdn.jsdelivr.net/sockjs/0.3.4/sockjs.min.js"></script>
<script>
var sock = new SockJS('http://localhost:9090/myapp');
sock.onopen = function() {
console.log('open');
};
sock.onmessage = function(e) {
console.log('message', e.data);
};
sock.onclose = function() {
console.log('close');
};
function send(message) {
sock.send(message);
}
</script>
<form onsubmit="return false;">
<input type="text" name="message" value="Hello, World!"/>
<input type="button" value="Send Web Socket Data" onclick="send(this.form.message.value)"/>
</form>
</body>
</html>
但是,当客户端尝试建立连接时,它会请求 URL http://localhost:9090/myapp/info
,这会导致 404。我知道它是 SockJS 协议的一部分,但为什么不呢?服务器端 Verticle 不处理它吗?我应该自己处理 "info" 个请求吗?
我做错了什么?
如果你看看给定的例子
您需要在通配符地址
上注册一个SockJSHandler