我正在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
)的任何想法?我需要的唯一功能是在服务器和客户端之间发送字符串。
答案 0 :(得分:0)
我找到了解决问题的可能方法。通过Eclipse,我可以Export
将Java项目转换为可运行的jar(&#34;打包&#34;将库放入jar中)。然后使用java -jar <jar_filename>
运行它将在服务器上运行,并且与本地计算机上的功能相同。但是,我注意到一些性能问题(启动缓慢),因此我认为这不是最佳解决方案,但它是一种解决方案。