playframework-2.0 - Playframework 2 和 Netty 开发

标签 playframework-2.0 netty

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

例如,如果我编写一个自定义的 playframework 2 模块,我会将 netty 代码放在哪里?或者我有一个 playframework Web 应用程序,我在哪里放置 netty 代码,如何组织应用程序。

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

最佳答案

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

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

现在,你谈论netty并玩...让我们解释一下谁是谁...

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

玩家们做了什么?他们在netty“下”构建了游戏,而没有修改netty。最好的理解方法是使用早期版本的 play 并查看包中的入口点类:play.server.Server。看看这个包,你会学到很多东西。您将看到他们为 http 创建了 2 个服务,为 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 类中找到您可以为自己的协议(protocol)实现的frameDecoder 列表。

我们习惯做的是不直接修改框架,所以我不建议你修改 Play Framework 。您应该询问他们在哪里放置新服务和新管道。

关于playframework-2.0 - Playframework 2 和 Netty 开发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12673900/

相关文章:

java - Netty ClosedChannelException 异常

java - Apache camel netty 自定义编码器和解码器示例

scala - Play 框架 - Scala,方法被定义两次

java - 官方 supercsv 推土机示例不适用于 Play — Play 2.1.1,Java

java - Play 2.0 Framework模板引擎中的计算

java - 我怎样才能关闭netty客户端?

spring-webflux - Netty Http 客户端连接池

json - 将 JsValue 转换为字符串

apache - Play Framework : Secure WebSocket with Apache

java - 如何使用 Rest Express 中的 url 重写来重写 url