【问题标题】:Draft10 with WSS带有 WSS 的 Draft10
【发布时间】:2011-11-06 08:32:30
【问题描述】:

我正在尝试在 SSL (WSS) 之上运行 Netty Draft10 最新示例

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

我正在使用以下端口配置:

端口:80:Apache 非 ssl
端口:443:Apache ssl
端口:8080:Tomcat
端口:8877:Netty Web 非 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());

有什么想法吗?

干杯,

塔米尔

【问题讨论】:

    标签: netty


    【解决方案1】:

    我刚刚上传了一个使用 SSL 的 web 套接字的工作示例,我已经与 master 合并了。

    查看拉取请求:https://github.com/netty/netty/pull/53

    新代码在 src/main/java/org/jboss/netty/example/http/websocketx/sslserver

    有关设置说明,请阅读 package-info.java。

    让我知道它是否适合你。

    【讨论】:

    • 谢谢。您能否将此标记为已回答,以便我们的过滤器不会继续显示此问题。谢谢。
    【解决方案2】:

    自从我自己遇到这个问题以来,我认为它可能值得一提:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-03
      • 1970-01-01
      • 1970-01-01
      • 2017-09-06
      • 1970-01-01
      • 1970-01-01
      • 2015-03-05
      • 2020-06-28
      相关资源
      最近更新 更多