Playframework 2.0 Playframework 2和Netty开发
我正在使用PlayFramework2 for web,但现在我还需要向netty添加一些自定义功能,添加flash套接字、flash策略文件,也许以后还会添加一些流媒体。所有这些烦人的代码都可以在网上找到,这不是我的问题。我只是想知道如何将playframework与netty集成,在playframework 2中向netty添加这些功能的最佳方式是什么 例如,如果我编写一个定制的PlayFramework2模块,我将把netty代码放在哪里?或者我有一个playframework web应用程序,我应该将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应
我不是不专业的,所以解释越简单越好,谢谢你的帮助。我知道这个问题很老了,但是对于下一个来这里的人: 简短答复: -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);
}
}