玩框架vs SocketIO如何整合它们?

时间:2015-11-13 11:49:41

标签: java scala playframework socket.io

所以我们想玩一玩!可以与SocketIO(javascript)客户端通信的应用程序。

到目前为止我尝试过:

使用Play!构建在WebSocket中并发送与node.js服务器完全相同的字符串。结果根本不起作用。我可以在chrome框架选项卡中看到返回的消息,但是当来自nodejs服务器的消息触发onEvent处理程序时,java实现永远不会这样做。

使用/移植socket.io.play项目。结果和Play一样! websocket版本,服务器获取消息,响应,但消息不会触发javascript事件处理程序。

第三个java实现是netty-socketio。我还没有尝试过,但是当我需要在另一个端口上启动它而不是使用服务器端口和构建路由时,主要概念是有问题的。

欢迎Java和scala版本,我可以同时使用它们。

所以我的问题:

  • 是否有使用SocketIO(> = v1.0)的Play(> = 2.3.0)应用程序?
  • Play的内置WebSocket实现可能存在什么问题! ?如何将它用于SocketIO协议?
  • 我可以在Play中使用基于netty的webapp吗?应用程序没有使用新的路由机制或新端口?
  • 是否有任何参考实现使用更多类型或形式语言然后javascript?

播放Java控制器返回类型示例:

public class WebSocketWithCallBack extends WebSocket<String> {
    private static List<Out<String>> globalOutList = new ArrayList<>();
    @Override
    public void onReady(In<String> in, final Out<String> out) {
        //Adding the output to the room
        globalOutList.add(out);
        System.out.println("adding output, " + globalOutList.size());
        // For each event received on the socket,
        in.onMessage(new F.Callback<String>() {
            public void invoke(String event) {
                //send event to all outputs
                System.out.println("recieved message: ");
                System.out.println(event);
                for(Out<String> outlocal : globalOutList) {
                    outlocal.write("42[\"chat message\",\"asd\"]");
                }
            }
        });
        // When the socket is closed.
        in.onClose(new F.Callback0() {
            public void invoke() {
                //removing the output when closed
                globalOutList.remove(out);
                System.out.println("removing output, " + globalOutList.size());
            }
        });
    }
}

0 个答案:

没有答案