0

我正在尝试将 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是否也有平行线..

感谢任何帮助。谢谢!

4

2 回答 2

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()
于 2013-09-23T12:10:48.153 回答
0

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

GET     /loggedin/loggedInSocket                 controllers.Presencelanding.loggedInSocket()
于 2013-09-23T17:34:07.887 回答