Я пытаюсь играть с WebSockets, поэтому я создал WS-сервер так:WebSockets в Jelastic: DeploymentException: Ответ HTTP с сервера не позволяют обновить HTTP на WebSocket
@ServerEndpoint(value = "/chat")
public class WsChatServlet{
private static final Logger LOGGER =
Logger.getLogger(WsChatServlet.class.getName());
@OnOpen
public void onOpen(Session session) {
LOGGER.log(Level.INFO, "New connection with client: {0}",
session.getId());
}
@OnMessage
public String onMessage(String message, Session session) {
LOGGER.log(Level.INFO, "New message from Client [{0}]: {1}",
new Object[] {session.getId(), message});
return "Server received [" + message + "]";
}
@OnClose
public void onClose(Session session) {
LOGGER.log(Level.INFO, "Close connection for client: {0}",
session.getId());
}
@OnError
public void onError(Throwable exception, Session session) {
LOGGER.log(Level.INFO, "Error for client: {0}", session.getId());
}
}
и развернуть его в Tomcat 7 работает на Java 7. Затем я создал этот клиент:
@ClientEndpoint
public class Main {
private static final String uri = "ws://myserver.net/chat";
public static void main(String[] args) throws DeploymentException, IOException, URISyntaxException, InterruptedException {
WebSocketContainer wsContainer = ContainerProvider.getWebSocketContainer();
Session session = wsContainer.connectToServer(Main.class, new URI(uri));
session.getBasicRemote().sendText("Here is a message!");
Thread.sleep(1000);
session.close();
}
@OnMessage public void processMessage(String message){
System.out.println(message);
}
}
Этот клиент работает как приложение COMAND линии. Когда я запускаю его, я получаю исключение:
Exception in thread "main" javax.websocket.DeploymentException: The HTTP response from the server [HTTP/1.1 302 Found] did not permit the HTTP upgrade to WebSocket
Таким образом, похоже, что сервер не отвечает должным образом моему клиенту. Я заметил, что если я получаю доступ к ws://myserver.net/chat
, то он отвечает 302, но для ws://myserver.net/chat/
(уведомление /
) он отвечает 200 OK.
Более интересен этот Tomcat журналы:
-
- [01/Октябрь/2014: 15: 52: 35 +0000] "GET/чат/HTTP/1.0" 200 57
-
- [01/октябрь/2014: 15: 52: 42 +0000] "GET/чат HTTP/1.0" 302 -
Как вы можете видеть, мой клиент подключается к HTTP 1.0, а не 1.1, что может быть неправильным. Я полностью застрял в этом. Не понимаю, почему это не работает.
EDIT: Итак, мой главный вопрос: почему WebSockets не работает (я думаю HTTP Upgrade заголовка ответа пропущенных) и как это исправить.
EDIT2: Я забыл, что самое главное: я размещаю его в свободной среде Jelastic.
Итак, если у меня нет публичного IP-адреса в Jelastic, я не могу заставить работать мой websocket? – KuKeC
@KuKeC: вы не можете заставить websocket работать без общедоступного IP-адреса – Andrew