在Netty中禁用HTTP协议请求?

时间:2015-06-05 05:50:23

标签: java http netty

我用Java编写游戏服务器,并且我使用的是Netty 3.6.2。游戏服务器不应该接受任何HTTP请求,因为它们只是处理游戏客户端数据(纯粹是TCP上的字节)。当我在Chrome中加载http://server-ip:game-servers-port时,我会下载一个包含游戏握手包的文件(这不应该发生)。

我像这样绑定到游戏服务器的端口:

ChannelFactory factory = new NioServerSocketChannelFactory(Executors.newCachedThreadPool(), Executors.newCachedThreadPool());
clientAcceptor = new ServerBootstrap(factory);

clientAcceptor.setOption("child.tcpNoDelay", true);
clientAcceptor.setOption("child.keepAlive", false);

clientAcceptor.setPipelineFactory(() -> Channels.pipeline(new PacketDecoder(), new ClientHandler()));

clientAcceptor.bind(new InetSocketAddress(Configurations.CHANNEL_GAME_PORT));

我在SimpleChannelHandler中处理请求,如此

@Override
public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) {
    // Encryption key code.

    Packets.sendHello(ctx.getChannel(), ivRecv, ivSend);

    ctx.getChannel().setAttachment(client);
}

如果传入的请求使用HTTP协议,我该如何解密?

编辑:我还应该说,它还应该阻止任何FTP,WebSocket等协议(基本上不是游戏协议的任何内容)。

1 个答案:

答案 0 :(得分:2)

如果您对接受的连接做的第一件事就是发送内容,那么您无法预期能够禁用HTTP请求。

客户端在握手中进行第一次发送。让服务器以接收方式启动,如果没有正确的初始握手包,请关闭连接。