我已经从GitHub下载了Play Framework并进行了编译。现在我想使用WebSockets,并制作一个类似于使用WebSockets中的JavaScript客户端和WebSocket控制器,但它不起作用。我可以打开WebSocket,但控制器没有接收到我发送给它的任何消息。我也无法用
如何使用Play Framework接收和发送WebSocket消息?
这是我的Play Framework WebSocketController:
ws.close();
关闭WebSocket,但如果我在浏览器中更新我的网页,则服务器上的WebSocket会被关闭。如何使用Play Framework接收和发送WebSocket消息?
这是我的Play Framework WebSocketController:
public class TestSocket extends WebSocketController {
public static void hello(String name) {
while(inbound.isOpen()) {
WebSocketEvent evt = await(inbound.nextEvent());
if(evt instanceof WebSocketFrame) {
WebSocketFrame frame = (WebSocketFrame)evt;
System.out.println("received: " + frame.getTextData());
if(!frame.isBinary()) {
if(frame.getTextData().equals("quit")) {
outbound.send("Bye!");
disconnect();
} else {
outbound.send("Echo: %s", frame.getTextData());
}
}
} else if(evt instanceof WebSocketClose) {
System.out.println("socket closed");
}
}
}
}
以下是我的JavaScript客户端:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>WebSocket test</title>
<style>
.message {background: lightgray;}
</style>
<script>
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=TestUser");
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);
}
</script>
</head>
<body>
<h1>WebSocket test</h1>
<button id="connectbutton">Connect</button>
<button id="disconnectbutton">Disconnect</button><br>
<input type="text" id="messagefield"/><button id="sendbutton">Send</button>
<div id="status"></div>
</body>
</html>
outbound.send("Hello %s!", name);
的简单示例运行良好。 - Jonasframe.textData
和frame.isBinary
无法编译通过,只有frame.getTextData()
和frame.isBinary()
可以编译通过。"错误信息显示:isBinary无法解析或不是一个字段"。 - Jonasgit clone git://github.com/playframework/play.git --depth 1
下载了我的代码,并在framework/
文件夹中使用ant
进行编译。 - Jonas