我正在尝试将 Websockets 合并到我的 Play 应用程序中。我的路线文件如下:
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");
}
但是,当我在路由文件中添加 websocket 返回函数时,出现以下错误:无法使用返回 play.mvc.WebSocket[?0] 作为处理程序的方法
如果我删除此行并重试,我会在尝试设置 websocket 时收到 Javascript 控制台错误:WebSocket connection to 'ws://localhost:9000/loggedInSocket' failed: Unexpected response code: 500
QS2:我如何使用相同的 websocket 更新 html?
QS 3:有很多关于在 Scala 中使用 Iteratees 等用于 websockets 的帖子。java是否也有平行线..
感谢任何帮助。谢谢!