我知道这个问题很老了,但是对于下一个来到这里的人:
简短的回答: - play2 框架有一个 FlashPolicyHandler 类,它应该开箱即用。- 但是如果你想在 flash 和 netty 之间交换消息,你需要更多,你可以看看netty 游戏服务器就可以了。但它需要一点技能才能准确理解它是如何工作的。顺便说一句,它处理 as3 和 netty 之间的通信方式。这是一种自定义方式,我不确定您是否可以使用内置的 flex 方法(flex 是一个 gui as3 框架)。
现在,你谈论网络和游戏......让我们解释一下谁是谁......
Netty “只是”一个处理 NIO 非阻塞 IO 的框架。使用 netty,您可以让任何服务器监听套接字并将数据返回给客户端,在任何协议 TCP/UDP http SMTP 等中...例如 google netty+smtp 或 netty+UDP ..+loadbalancer 等。
小伙伴们都做了什么?他们在不修改网络的情况下构建了“在”网络之下的游戏。最好的理解方法是查看早期版本的 play 并查看 package 中的入口点类:play.server.Server。看看这个包,你会学到很多东西。您会看到他们为 http 和 https 分别创建了 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 列表,您可以为自己的协议实现。
我们习惯做的是不直接修改框架,所以我不建议你修改播放框架。您应该询问他们在哪里放置新服务和新管道。