Playframework 2.0 Playframework 2和Netty开发

Playframework 2.0 Playframework 2和Netty开发,playframework-2.0,netty,Playframework 2.0,Netty,我正在使用PlayFramework2 for web,但现在我还需要向netty添加一些自定义功能,添加flash套接字、flash策略文件,也许以后还会添加一些流媒体。所有这些烦人的代码都可以在网上找到,这不是我的问题。我只是想知道如何将playframework与netty集成,在playframework 2中向netty添加这些功能的最佳方式是什么 例如,如果我编写一个定制的PlayFramework2模块,我将把netty代码放在哪里?或者我有一个playframework web应

我正在使用PlayFramework2 for web,但现在我还需要向netty添加一些自定义功能,添加flash套接字、flash策略文件,也许以后还会添加一些流媒体。所有这些烦人的代码都可以在网上找到,这不是我的问题。我只是想知道如何将playframework与netty集成,在playframework 2中向netty添加这些功能的最佳方式是什么

例如,如果我编写一个定制的PlayFramework2模块,我将把netty代码放在哪里?或者我有一个playframework web应用程序,我应该将netty代码放在哪里,如何组织应用程序


我不是不专业的,所以解释越简单越好,谢谢你的帮助。

我知道这个问题很老了,但是对于下一个来这里的人:

简短答复: -play2框架有一个FlashPolicyHandler类,它应该立即完成这项工作。 -但是如果你想在flash和netty之间交换信息,你需要更多,你可以看看wich是如何完成这项工作的。但它需要一些技巧来准确理解它是如何工作的。顺便说一下,它处理as3和netty之间的通信方式。这是一种定制方式,我不确定您是否可以使用内置flex方法(flex是一个gui as3框架)

现在,你谈论内蒂和玩耍。。。让我们解释一下谁是谁

Netty“只是”一个处理NIO非阻塞IO的框架。使用netty,您可以使任何服务器侦听套接字,并以任何协议TCP/UDP http SMTP等将数据返回到客户端。。。例如google netty+smtp或netty+UDP..+负载均衡器等

你们玩了些什么?他们在没有修改netty的情况下“在”netty下构建了游戏。最好的理解方法是看一看play的早期版本,看看包中的入口点类:play.server.server。看看这个包裹,你会学到很多。您将看到,他们在http上为https创建了两个服务。如果您查看HttpServerPipelineFactory类,您会发现flashPolicy是它们处理的第一件事情

我不是play framework的超级用户,所以我不知道如何实现模块。但事实上,您可以在服务器类中添加一个新服务,您将需要一个新的ChannelPipeline、一个新的boostrap等等

这里是我为amf3所做的示例


包org.domorobo.scale.server.amf3;
导入java.net.InetSocketAddress;
导入java.util.concurrent.Executors;
导入org.domorobo.scale.server.api.IServer;
导入org.jboss.netty.bootstrap.ServerBootstrap;
导入org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;
导入org.slf4j.Logger;
导入org.slf4j.LoggerFactory;
公共类AMF3Server实现IServer{
私有静态最终记录器l=LoggerFactory.getLogger(AMF3Server.class);
公开作废开始(){
l、 信息(“服务器启动”);
//配置服务器。
NioServerSocketChannelFactory工厂=null;
factory=new NioServerSocketChannelFactory(Executors.newCachedThreadPool(),Executors.newCachedThreadPool());
ServerBootstrap serverBosstrap=新的ServerBootstrap(工厂);
//设置事件管道工厂。
试一试{
setPipelineFactory(新的Amf3PipelineFactory());
setOption(“child.tcpNodelay”,true);
//绑定并开始接受传入连接。
bind(新的InetSocketAddress(8089));
如果(l.IsInfo已启用()==true){
l、 信息(“服务器在8089端口开始侦听”);
}
}捕获(例外e){
l、 错误(“OHO\r\n”,e);
}
}

在Amf3PipelineFactory类中可以找到一个可以为自己的协议实现的帧解码器列表

我们通常不直接修改框架,所以我不建议您修改play框架。您应该询问他们在哪里放置新服务和新管道


package org.domorobo.scale.server.amf3;
import java.net.InetSocketAddress;
import java.util.concurrent.Executors;
import org.domorobo.scale.server.api.IServer;
import org.jboss.netty.bootstrap.ServerBootstrap;
import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class AMF3Server  implements IServer{
    private static final Logger l = LoggerFactory.getLogger(AMF3Server.class);
    public void start() {
        l.info("server start");
        // Configure the server.
        NioServerSocketChannelFactory factory = null;
        factory = new NioServerSocketChannelFactory(Executors.newCachedThreadPool(),             Executors.newCachedThreadPool());
        ServerBootstrap serverBosstrap = new ServerBootstrap(factory);
        // Set up the event pipeline factory.
        try {
            serverBosstrap.setPipelineFactory(new Amf3PipelineFactory());
            serverBosstrap.setOption("child.tcpNodelay", true);
            // Bind and start to accept incoming connections.
            serverBosstrap.bind(new InetSocketAddress(8089));
            if (l.isInfoEnabled() == true) {
                l.info("server started listenning at 8089 port");
            }
        } catch (Exception e) {
            l.error("OHO\r\n", e);
        }
}