J'essaye de configurer un serveur Websockets simple avec le jeu! cadre (1.2.4). Tout ce qui devrait arriver maintenant est que le client se connecte, reçoive un message "Hello User", puis le socket devrait se fermer. Je reçois des résultats différents avec différents navigateurs: Safari fonctionne comme prévu; Chrome 17 provoque une erreur:Jouez! Framework Websockets avec Chrome 17
play.exceptions.JavaExecutionException: The outbound channel is closed
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:231)
at play.mvc.WebSocketInvoker.invoke(WebSocketInvoker.java:28)
at play.server.PlayHandler$WebSocketInvocation.execute(PlayHandler.java:1332)
...
Voici le code côté serveur:
package controllers;
import play.*;
import play.mvc.*;
import play.mvc.Http.WebSocketClose;
import play.mvc.Http.WebSocketEvent;
import play.mvc.Http.WebSocketFrame;
import java.util.*;
import models.*;
import play.data.validation.*;
public class Application extends Controller {
public static void index() {
render();
}
public static class WebSocket extends WebSocketController {
public static void hello(String name) {
outbound.send("Hello %s!", name);
}
}
}
/ws est dirigé vers Application.WebSocket.hello. Le javascript côté client:
window.onload = function() {
document.getElementById('sendbutton')
.addEventListener('click', sendMessage, false);
document.getElementById('connectbutton')
.addEventListener('click', connect, false);
document.getElementById('disconnectbutton')
.addEventListener('click', disconnect, false);
}
function writeStatus(message) {
var html = document.createElement("div");
html.setAttribute('class', 'message');
html.innerHTML = message;
document.getElementById("status").appendChild(html);
}
function connect() {
ws = new WebSocket("ws://localhost:9000/ws?name=User");
ws.onopen = function(evt) {
writeStatus("connected");
}
ws.onclose = function(evt) {
writeStatus("disconnected");
}
ws.onmessage = function(evt) {
writeStatus("response: " + evt.data);
}
ws.onerror = function(evt) {
writeStatus("error: " + evt.data);
}
}
function disconnect() {
ws.close();
}
function sendMessage() {
ws.send(document.getElementById('messagefield').value);
}
est la réponse de poignée de main ne va pas? Comment puis-je réparer cela?
Cela a fonctionné parfaitement. Je vous remercie! – user1219646