Play Framework 2.x的Websockets - Java - 500错误

时间:2013-09-23 04:00:26

标签: playframework-2.0

我正在尝试在我的Play应用中加入Websockets。 我的路线文件如下:

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()

我想在用户重定向到此/登录页面后立即创建一个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]作为Handler

返回的方法

如果我删除此行并重试此操作,则在尝试设置websocket时出现Javascript控制台错误: 与'ws:// localhost:9000 / loggedInSocket'的WebSocket连接失败:意外的响应代码:500

QS2:我如何使用相同的websocket更新html?

问题3:关于使用scala的websockets,有很多关于使用Iteratees等的帖子。 java也有并行...

感谢任何帮助。谢谢!

2 个答案:

答案 0 :(得分:1)

将您的路线更改为:

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()

答案 1 :(得分:0)

感谢您的回答。 我可以通过在路径文件中添加以下行来解决这个问题:

GET     /loggedin/loggedInSocket                 controllers.Presencelanding.loggedInSocket()