首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Playframework 2与Netty开发

Playframework 2与Netty开发
EN

Stack Overflow用户
提问于 2012-10-01 21:06:03
回答 1查看 1.2K关注 0票数 2

我正在使用web播放框架2,但现在我也需要添加一些自定义功能到netty,添加闪存套接字,闪存策略文件,可能稍后在一些流媒体。所有的网络代码都可以在网上找到,这不是我的问题。我只想知道如何将playframework与netty集成在一起,将playframework 2中的这些功能添加到netty中的最好方法是什么?

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

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

EN

回答 1

Stack Overflow用户

发布于 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所做的一个示例

代码语言:javascript
复制
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框架。你应该问他们在哪里放置新的服务和新的管道。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12673900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档