私はPlay!で簡単なWebsocketsサーバーを設定しようとしています。フレームワーク(1.2.4)。クライアントが接続し、 "Hello User"メッセージを受け取ったら、ソケットを閉じる必要があります。ブラウザごとに異なる結果が出ています。Safariは期待通りに動作します。クローム17は、エラーが発生します。再生!フレームワークのWebSocket with Chrome 17
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 Application.WebSocket.helloにルーティングされます。ここでは
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)
...
は、サーバー側のコードがあります。 クライアント側のjavascript:
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);
}
は、ハンドシェイク応答が間違っていますか?これをどうすれば解決できますか?
これは完全に機能しました。ありがとうございました! – user1219646