Playframework 2.0 带有PlayFramework 2.x的WebSocket-Java-500错误
我正在尝试将WebSocket合并到我的Play应用程序中。 我的路由文件如下:Playframework 2.0 带有PlayFramework 2.x的WebSocket-Java-500错误,playframework-2.0,Playframework 2.0,我正在尝试将WebSocket合并到我的Play应用程序中。 我的路由文件如下: GET /login controllers.Application.login() POST /login controllers.Application.authenticate() GET /logout contro
GET /login controllers.Application.login()
POST /login controllers.Application.authenticate()
GET /logout controllers.Application.logout()
GET /loggedin controllers.Presencelanding.loggedInSocket()
GET /loggedin controllers.Presencelanding.loggedIn()
我想在用户被重定向到此/loggedin页面后立即创建一个websocket
现在在我的控制器面前,我有
public static Result loggedIn(){
..... blah ....blah}
public static WebSocket loggedInSocket() {
try {
final Http.Session session = session();
String username = session(AppConstants.USERNAME);
connection = getConnection(username);
connection = XMPPConnectionHandler.performLogin(
xmppLogin.getLoggedinuser().getUsername(),
xmppLogin.getLoggedinuser().getPassword(),connection);
getAllData();
} catch (Exception e) {
e.printStackTrace();
Logger.error(e.getLocalizedMessage());
}
return new WebSocket() {
public void onReady(WebSocket.In in, WebSocket.Out out) {
System.out.println("ready");
in.onMessage(new F.Callback() {
public void invoke(String event) {
System.out.println(event);
}
@Override
public void invoke(Object a) throws Throwable {
System.out.println(a);
}
});
in.onClose(new F.Callback0() {
public void invoke() {
System.out.println("Disconnected");
}
});
out.write(loggedin.render(xmppLogin,completedChallenges,
pendingSentFromMeChal,pendingForMeChal,unseen));
}
};
}
通过客户端上的javascript,我有:
$(document).ready(function () {
getWebSocket();
});
function getWebSocket() {
var ws = new WebSocket("ws://localhost:9000/loggedInSocket");
}
但是,当我在routes文件中添加websocket返回函数时,出现以下错误:
无法使用返回play.mvc.WebSocket[?0]作为处理程序的方法
如果删除此行并重试,则在尝试设置websocket时会出现Javascript控制台错误:
到“ws://localhost:9000/loggedInSocket”的WebSocket连接失败:意外响应代码:500
问题2:我如何使用相同的websocket更新html
QS 3:有很多关于在scala中使用WebSocket的Iteratees等的帖子。java也有类似的版本吗
谢谢你的帮助,谢谢 将您的路线更改为:
GET /login controllers.Application.login()
POST /login controllers.Application.authenticate()
GET /logout controllers.Application.logout()
GET /loggedInSocket controllers.Presencelanding.loggedInSocket()
GET /loggedin controllers.Presencelanding.loggedIn()
谢谢你的回答。
我可以通过在routes文件中添加以下行来解决此问题:
GET /loggedin/loggedInSocket controllers.Presencelanding.loggedInSocket()
嗨,迈克,我已经更新了QS2上的问题-您的websocket消息可能只包含一个JS的“信号”,它在接收后将在后台执行常见的AJAX调用,接收更新的数据并刷新视图