Draft10与WSS

问题描述:

我试图在SSL上运行的Netty Draft10最新的例子(WSS)Draft10与WSS

https://github.com/netty/netty/tree/master/src/main/java/org/jboss/netty/example/http/websocketx/server

我使用以下端口配置:

端口:80:阿帕奇非SSL
端口:443:Apache的SSL
端口:8080:Tomcat的
端口:8877:Netty的网络非SS
端口:9977:Netty SSL拥有

但是,当我使嵌入的SSL处理程序代码

public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception { 

    //TODO - Tamir - Add support for Wss 
    // Get the SslHandler in the current pipeline. 
    // We added it in SecureChatPipelineFactory. 
    final SslHandler sslHandler = ctx.getPipeline().get(SslHandler.class); 

    // Get notified when SSL handshake is done. 
    ChannelFuture handshakeFuture = sslHandler.handshake(); 
    handshakeFuture.addListener(new Greeter(sslHandler)); 
} 

到WebSocketServerHandler类我得到一个错误信息

java.lang.IllegalArgumentException: empty text 
     at org.jboss.netty.handler.codec.http.HttpVersion.<init>(HttpVersion.java:95) 
     at org.jboss.netty.handler.codec.http.HttpVersion.valueOf(HttpVersion.java:68) 
     at org.jboss.netty.handler.codec.http.HttpRequestDecoder.createMessage(HttpRequestDecoder.java:81) 
     at org.jboss.netty.handler.codec.http.HttpMessageDecoder.decode(HttpMessageDecoder.java:198) 
     at org.jboss.netty.handler.codec.http.HttpMessageDecoder.decode(HttpMessageDecoder.java:107) 
     at org.jboss.netty.handler.codec.replay.ReplayingDecoder.callDecode(ReplayingDecoder.java:470) 
     at org.jboss.netty.handler.codec.replay.ReplayingDecoder.messageReceived(ReplayingDecoder.java:443) 
     at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:275) 
     at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:262) 
     at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:340) 
     at org.jboss.netty.channel.socket.nio.NioWorker.processSelectedKeys(NioWorker.java:271) 
     at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:191) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
     at java.lang.Thread.run(Thread.java:662) 
java.lang.IllegalArgumentException: invalid version format: ?_?_?__ 

这是我的流水线代码

SSLEngine engine = 
     SecureChatSslContextFactory.getServerContext().createSSLEngine(); 
    engine.setUseClientMode(false); 

    pipeline.addLast("ssl", new SslHandler(engine)); 

    // On top of the SSL handler, add the text line codec. 
    pipeline.addLast("decoder", new StringDecoder()); 
    pipeline.addLast("encoder", new StringEncoder()); 

    // and then business logic. 
    pipeline.addLast("handler", new WebSocketServerHandler()); 

任何想法?

干杯,

塔米尔

我刚刚上传的SSL网络插座,我已经与主合并的工作示例。

请参阅请求:https://github.com/netty/netty/pull/53

新的代码在src /主/ JAVA /组织/ JBoss的/网状/例子/ HTTP/websocketx/sslserver

请仔细阅读package-info.java的设置说明。

让我知道它是否适合你。

+0

这工作很好! –

+0

谢谢。您能否将此标记为已回答,以便我们的过滤器不会显示此问题。谢谢。 – Veebs

因为我碰到这个问题我自己我想这可能是值得一提:

在某些情况下,initialLine参数的解析HttpRequestDecoder是错误的。 如果您不添加路径到URI,即尝试使用ws:// localhost:8080而不向URL添加/ websocket,则可能会发生这种情况。

return new DefaultHttpRequest(HttpVersion.valueOf(initialLine[2]), 
       HttpMethod.valueOf(initialLine[0]), initialLine[1]); 

HTTP版本字段应该在initialLine [2]中,但是它会出现在initialLine [1]中。