AWS的WebSocket握手错误

时间:2016-03-18 22:59:12

标签: java amazon-web-services amazon-ec2 websocket java-websocket

我正在AWS EC2实例上运行Java服务器(特定于Jetty),使用WebSocket连接到客户端的浏览器。当我在本地执行此操作(在我的计算机上托管服务器,而不是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编译和运行代码,但是我正在编译并在EC2上运行代码(javac有很多类路径)。我手工编译时可能会出错,但我不确定错误是什么。

非常感谢任何帮助。

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

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)的任何想法?我需要的唯一功能是在服务器和客户端之间发送字符串。

1 个答案:

答案 0 :(得分:0)

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