Я запускаю сервер Java (конкретный Jetty) на экземпляре AWS EC2, используя WebSocket для подключения к браузеру клиента. Когда я делаю это локально (хостинг сервера на моем компьютере, а не AWS), он работает нормально. Однако, когда я двигаю код экземпляра EC2, я получаю следующее сообщение об ошибке на стороне клиента:Ошибка установления соединения с WebSocket с AWS
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
с большим количеством путей к классам). Вероятно, я сделал ошибку при компиляции вручную, но я не уверен, что может быть ошибкой.
Любая помощь была бы принята с благодарностью.
EDIT
После небольшого поиска неисправностей на моей, я понял, что 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
) Я должен использовать? Единственная возможность, которая мне нужна, - отправить строки между сервером и клиентом.
Не могли бы вы предоставить полный стек, чтобы мы могли видеть, в каком классе, в частности, JVM жалуется? Кроме того, вместо того, чтобы использовать Eclipse для локального запуска кода сервера, можете ли вы попробовать запустить его локально так же, как и в экземпляре EC2, чтобы ваша локальная среда была ближе или больше похожа на ту, которая находится на экземпляре EC2? – Castaglia
@Castaglia Я исправил основную проблему для рукопожатия (мне пришлось удалить импорт на код сервера, но он работает на локальной стороне с импортом), но я ударяю еще один дорожный блок. Я обновил вопросы, чтобы отразить мое несчастье. – skamazin