Draft10与WSS
问题描述:
我试图在SSL上运行的Netty Draft10最新的例子(WSS)Draft10与WSS
我使用以下端口配置:
端口: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的设置说明。
让我知道它是否适合你。
答
因为我碰到这个问题我自己我想这可能是值得一提:
在某些情况下,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]中。
这工作很好! –
谢谢。您能否将此标记为已回答,以便我们的过滤器不会显示此问题。谢谢。 – Veebs