Environment: Mac osx lion
Grails version: 2.1.0
Java: 1.7.0_08-ea
Bootstrap.groovy 内で組み込みモードで vertx を起動し、複数のブラウザーを介して同じ Websocket エンドポイントをヒットしようとすると、要求がキューに入れられます。
そのため、リクエストのタイミングに応じて、1 つのリクエストが実行された後、次のリクエストがハンドラーに入ります。
websocket と SockJs の両方でこれを試したところ、両方で同じ動作に気付きました。
BootStrap.groovy (SockJs):
def vertx = Vertx.newVertx()
def server = vertx.createHttpServer()
def sockJSServer = vertx.createSockJSServer(server)
def config = ["prefix": "/eventbus"]
sockJSServer.installApp(config) { sock ->
sleep(10000)
}
server.listen(8088)
JavaScript:
<script>
function initializeSocket(message) {
console.log('initializing web socket');
var socket = new SockJS("http://localhost:8088/eventbus");
socket.onmessage = function(event) {
console.log("received message");
}
socket.onopen = function() {
console.log("start socket");
socket.send(message);
}
socket.onclose = function() {
console.log("closing socket");
}
}
また
BootStrap.groovy (ウェブソケット):
def vertx = Vertx.newVertx()
def server = vertx.createHttpServer()
server.setAcceptBacklog(10000);
server.websocketHandler { ws ->
println('**received websocket request')
sleep(10000)
}.listen(8088)
JavaScript
socket = new WebSocket("ws://localhost:8088/ffff");
socket.onmessage = function(event) {
console.log("message received");
}
socket.onopen = function() {
console.log("socket opened")
socket.send(message);
}
socket.onclose = function() {
console.log("closing socket")
}