我正在使用web播放框架2,但现在我也需要添加一些自定义功能到netty,添加闪存套接字,闪存策略文件,可能稍后在一些流媒体。所有的网络代码都可以在网上找到,这不是我的问题。我只想知道如何将playframework与netty集成在一起,将playframework 2中的这些功能添加到netty中的最好方法是什么?
例如,如果我编写一个自定义的playframework 2模块,我应该把netty代码放在哪里?或者我有一个playframework web应用程序,我把netty代码放在哪里,我如何组织这个应用程序。
我不是不专业的,所以越简单的解释越好,谢谢你的帮助。
发布于 2013-07-03 04:14:55
我知道这个问题很老,但对于下一个来这里的人来说:
简而言之:- play2框架有一个FlashPolicyHandler类,它应该可以开箱即用。详细说明:但如果你想在闪存和netty之间交换消息,你需要更多,你可以看看netty game server,它可以完成这项工作。但它需要一些技能才能确切地理解它是如何工作的。顺便说一下,它处理了as3和netty之间的一种通信方式。这是一种自定义方式,我不确定您是否可以使用内置的flex方法(flex是一个gui as3框架)。
现在,你说起内蒂和打球...让我们解释一下谁是谁..。
Netty“只是”一个处理NIO非阻塞IO的框架。有了netty,你可以让任何服务器监听套接字,并将数据返回给客户端,采用任何协议TCP/UDP http SMTP等。例如谷歌、netty+smtp或netty+UDP、..+loadbalancer等。
玩游戏的家伙都做了些什么?他们在没有修改netty的情况下构建了“在”netty下的游戏。理解的最好方法是使用play的早期版本,并查看包中的入口点类: play.server.Server。看看这个包,你会学到很多。您将看到他们为http创建了2个服务,其他为https创建了服务。如果你看一下HttpServerPipelineFactory类,你会发现flashPolicy是他们处理的第一件事。
我不是play框架的高级用户,所以我不知道如何实现模块。但实际上你可以在服务器类中添加一个新的服务,你将需要一个新的ChannelPipeline,一个新的引导等等。
下面是我为amf3所做的一个示例
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);
}
}
您可以在Amf3PipelineFactory类中找到可以为您自己的协议实现的frameDecoder列表。
我们用来做的是不直接修改一个框架,所以我不建议你修改play框架。你应该问他们在哪里放置新的服务和新的管道。
https://stackoverflow.com/questions/12673900
复制相似问题