Playframework 2.0 带有PlayFramework 2.x的WebSocket-Java-500错误

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

我正在尝试将WebSocket合并到我的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");
}
但是,当我在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调用,接收更新的数据并刷新视图