与 AWS 的 WebSocket 握手错误

WebSocket Handshake Error with AWS

我正在使用 WebSocket 连接到客户端浏览器的 AWS EC2 实例上 运行ing Java 服务器(具体来说是 Jetty)。当我在本地执行此操作时(在我的计算机上托管服务器,而不是 AWS),它 运行 没问题。但是,当我将代码移动到 EC2 实例时,我在 客户端 收到以下错误消息:

WebSocket connection to 'ws://Elastic_IP:8080/?username=name_of_user' failed: Error during WebSocket handshake: Unexpected response code: 500

我确保 EC2 实例将接受端口 8080 上的流量。

服务器端,尝试连接时收到很多java.lang.NoClassDefFoundError。当我在本地 运行 时,我没有收到这些错误。当我在 EC2 实例上编译时,可能会出现问题,但它确实编译没有错误。我在本地使用 Eclipse 编译和 运行ning 代码,但我在 EC2 上手动编译和 运行ning 代码(javac 有很多 class 路径).可能是我手工编译的时候出错了,但是我不确定是什么错误。

如有任何帮助,我们将不胜感激。

编辑
在我自己进行了一些故障排除之后,我意识到 JSON.ParseException 是问题的根源。在我从服务器代码中删除对 class 的所有调用后,握手完成,我能够在服务器和客户端之间建立连接。 但是,当我收到来自客户端的消息时,我现在 运行 遇到以下错误:

WARN:MyWebSocketHandler:qtp990368553-16: Unhandled Error (closing connection) 
java.lang.RuntimeException: Cannot call method public void 
MyWebSocketHandler#onMessage(org.eclipse.jetty.websocket.api.Session, java.lang.String) with args:
[org.eclipse.jetty.websocket.common.WebSocketSession, java.lang.String]

好像我定义的参数是org.eclipse.jetty.websocket.api.Session,但是在运行的时候参数实际上是org.eclipse.jetty.websocket.common.WebSocketSession。关于这是怎么发生的或者我应该使用哪一个(Session vs WebSocketSession)有什么想法吗?我需要的唯一功能是在服务器和客户端之间发送字符串。

我找到了解决问题的可能方法。通过 Eclipse,我可以 Export 将 Java 项目转换为可运行的 jar("packing" 将库放入 jar)。然后 运行 它和 java -jar <jar_filename> 将在服务器上运行,并且功能与在本地计算机上相同。但是,我注意到一些性能问题(启动缓慢),所以我认为这不是 最佳 解决方案,但它是一个解决方案。