我正在使用playframework 2进行网络,但现在我还需要为netty添加一些自定义功能,添加闪存套接字,闪存策略文件以及稍后的某些流媒体。所有的网络代码都可以在网上找到,这不是我的问题。我只是想知道如何将playframework与netty集成,最好的方法是将playframework 2中的这些功能添加到netty。
例如,如果我编写一个自定义的playframework 2模块,我将把netty代码放在哪里?或者我有一个playframework网络应用程序,我在哪里放置网络代码,我该如何组织应用程序。
我不是不专业的,所以解释越简单越好,谢谢你的帮助。
答案 0 :(得分:3)
我知道问题已经过时了,但对于下一个来这里的人来说:
简短回答: - play2框架有一个FlashPolicyHandler类,它应该开箱即用。 - 但是如果你想在flash和netty之间交换消息,你需要更多,你可以看看netty game server做这项工作。但它需要一些技巧才能准确理解它是如何工作的。顺便说一句,它处理as3和netty之间的通信方式。这是一种自定义方式,我不确定您是否可以使用内置flex方法(flex是一个gui as3框架)。
现在,你谈论网络和游戏......让我们来解释谁是谁......
Netty“只是”处理NIO非阻塞IO的框架。使用netty,您可以使任何服务器听取套接字并将数据返回给客户端,在任何协议TCP / UDP http SMTP等等...例如google netty + smtp或netty + UDP .. + loadbalancer等等< / p>
玩家做了什么?他们在没有修改网络的情况下建立了“网络下”的游戏。理解的最好方法是采用早期版本的游戏,并查看包装中的入口点类:play.server.Server。在这个包中看起来很棒,你会学到很多东西。您将看到他们为https的http其他创建了2个服务。如果你看一下HttpServerPipelineFactory类,你会发现flashPolicy是他们处理的第一件事。
我不是Play框架的强大用户,因此我不知道如何实现模块。但实际上你可以在服务器类中添加一项新服务,你需要一个新的ChannelPipeline,一个新的boostrap等。
这里是我为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框架。您应该问他们在哪里放置新服务和新管道。