gpt4 book ai didi

java - 安全 WebSocket/Jetty 服务器(非嵌入式)/HTTPS : Service unavailable (503)

转载 作者:太空宇宙 更新时间:2023-11-03 13:25:23 26 4
gpt4 key购买 nike

我有一个来自 Danny Cowards 的“Java WebSocket 编程书”的非常简单的 WebSocket 服务器,如下所示:

import javax.websocket.server.ServerEndpoint;
import javax.websocket.OnMessage;

@ServerEndpoint (value="/echo")
public class EchoServer
{
@OnMessage
public String echo (String incomingMessage)
{
return "I got this (" + incomingMessage + "), so I am sending it back!";
}
}

我使用 gradle 2.7 编译它(参见下面的 build.gradle)

apply plugin: 'java'
apply plugin: "war"

repositories {
mavenCentral()
}

dependencies {
compile 'javax.websocket:javax.websocket-api:1.1'
}

并将它放在普通(仅 HTTP)Jetty 服务器(jetty-distribution-9.3.6.v20151106)的 webapps 目录中,我可以让它说话像这样访问 WebSocket 接口(interface)的客户端:

            var wsUri = "ws://localhost:8080/echoserver/echo";

然后,我使用相同的 *.war 文件,并将其放置在安全的 jetty 服务器上(运行 jetty-9.1.3.v20140225),但部署没有不行,我访问服务器使用(注意 wss 现在)

            var wsUri = "wss://localhost:8443/echoserver/echo";

因错误而无效。来自 Chrome 上 JavaScript 控制台的特定错误是 'WebSocket 连接到 'wss://localhost:8443/echoserver/echo' 失败:WebSocket 握手期间出错:意外响应代码:503'。但我认为这是因为发生了 RunTimeException 扫描 EchoServer.class(如 jetty stderrout.log 中所示):

2015-11-20 15:32:14.320:INFO:oejs.Server:main: jetty-9.1.3.v20140225
2015-11-20 15:32:14.329:INFO:oejs.AbstractNCSARequestLog:main: Opened /opt/jetty/logs/2015_11_20.request.log
2015-11-20 15:32:14.329:INFO:oejs.AbstractNCSARequestLog:main: Opened /opt/jetty/logs/2015_11_20.request.log
2015-11-20 15:32:14.331:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:/opt/jetty/webapps/] at interval 1
2015-11-20 15:32:14.421:INFO:oeja.AnnotationConfiguration:main: Scanned 1 container path jars, 1 WEB-INF/lib jars, 1 WEB-INF/classes d
irs in 17ms for context o.e.j.w.WebAppContext@4c70fda8{/echoserver,file:/tmp/jetty-0.0.0.0-8443-echoserver.war-_echoserver-any-7817985
952118790015.dir/webapp/,STARTING}{/echoserver.war}
2015-11-20 15:32:14.421:WARN:oejw.WebAppContext:main: Failed startup of context o.e.j.w.WebAppContext@4c70fda8{/echoserver,file:/tmp/j
etty-0.0.0.0-8443-echoserver.war-_echoserver-any-7817985952118790015.dir/webapp/,STARTING}{/echoserver.war}
java.lang.RuntimeException: Error scanning file EchoServer.class
at org.eclipse.jetty.annotations.AnnotationParser.parseDir(AnnotationParser.java:705)
at org.eclipse.jetty.annotations.AnnotationParser.parseDir(AnnotationParser.java:686)
at org.eclipse.jetty.annotations.AnnotationParser.parseDir(AnnotationParser.java:686)
at org.eclipse.jetty.annotations.AnnotationParser.parseDir(AnnotationParser.java:686)
at org.eclipse.jetty.annotations.AnnotationParser.parse(AnnotationParser.java:821)
at org.eclipse.jetty.annotations.AnnotationConfiguration$ParserTask.call(AnnotationConfiguration.java:159)
at org.eclipse.jetty.annotations.AnnotationConfiguration$1.run(AnnotationConfiguration.java:542)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:607)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:536)
at java.lang.Thread.run(Thread.java:745)
Caused by:
java.lang.IllegalArgumentException
at org.objectweb.asm.ClassReader.<init>(Unknown Source)
at org.objectweb.asm.ClassReader.<init>(Unknown Source)
at org.objectweb.asm.ClassReader.<init>(Unknown Source)
at org.eclipse.jetty.annotations.AnnotationParser.scanClass(AnnotationParser.java:970)
at org.eclipse.jetty.annotations.AnnotationParser.parseDir(AnnotationParser.java:700)
at org.eclipse.jetty.annotations.AnnotationParser.parseDir(AnnotationParser.java:686)
at org.eclipse.jetty.annotations.AnnotationParser.parseDir(AnnotationParser.java:686)
at org.eclipse.jetty.annotations.AnnotationParser.parseDir(AnnotationParser.java:686)
at org.eclipse.jetty.annotations.AnnotationParser.parse(AnnotationParser.java:821)
at org.eclipse.jetty.annotations.AnnotationConfiguration$ParserTask.call(AnnotationConfiguration.java:159)
at org.eclipse.jetty.annotations.AnnotationConfiguration$1.run(AnnotationConfiguration.java:542)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:607)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:536)
at java.lang.Thread.run(Thread.java:745)

我的环境是 Ubuntu 14.04/x64/Oracle java 8。顺便说一句,我从网站上下载了 Danny Cowards 的源代码,它与我拥有的代码完全相同。然而,它有它自己的神秘 *.war(在 dist 目录中,但是 ant build.xml 显然指的是各种 NetBeans 依赖项,它们在那里没有任何业务,因此我不能使用 ant 编译它)并将它放在 HTTPS jetty 中,它完全按预期运行,当我使用 wss: 访问它时我没有收到错误,所以它不是 SSL/自签名证书问题,我认为是这样。

谁能告诉我这里可能是什么问题?非常感谢任何对此的帮助。

谢谢,桑尼。

PS:我已经查看了一些关于 SO 的 WebSocket/SSL/Jetty 帖子,但它们似乎没有解决我在使用 Jetty 时遇到的问题。

最佳答案

Jetty 9.1.x 对于 JSR356 (javax.websocket) 使用来说太旧了。

使用 Jetty 9.2.x 或 Jetty 9.3.x 支持 JSR356。

由于您似乎使用的是 Java 8,因此请使用 Jetty 版本 9.3.6.v20151106

关于java - 安全 WebSocket/Jetty 服务器(非嵌入式)/HTTPS : Service unavailable (503),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33836104/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com