2016-07-26 3 views
0

Привет, ребята!Соединение с WebSocket для ... не выполнено: ошибка при рукопожатии WebSocket: неожиданный код ответа: 200

Я пытаюсь создать соединение через Интернет с Chrome Browser и сервером Glassfish 4.1.1. И не добились успеха 4 дня. К сожалению, я получаю HTTP 200 вместо сообщения 101 журнала

Chrome DevTool:

"WebSocket connection to 'ws://DOMAIN_NAME:8080/serverendpointdemo/' failed: 
Error during WebSocket handshake: Unexpected response code: 200" 

стороны клиента код:

var ws = new WebSocket ("ws://" + document.location.host + "/serverendpointdemo/"); 

стороны сервера код:

package com.za.tutorial.websocket; 

import javax.websocket.OnClose; 
import javax.websocket.OnError; 
import javax.websocket.OnMessage; 
import javax.websocket.OnOpen; 
import javax.websocket.server.ServerEndpoint; 

@ServerEndpoint("/home/USER_NAME/glassfish4/glassfish/domains/domain1/applications/serverendpointdemo") 
public class ServerEndpointDemo { 
    @OnOpen 
    public void handleOpen() { 
     System.out.println("Client is now connected..."); 
    } 

    @OnMessage 
    public String handleMessage (String message) { 
     return null; 
    } 

    @OnClose 
    public void handleClose() { 
    } 

    @OnError 
    public void handleError (Throwable t) { 
     t.printStackTrace(); 
    } 
} 

Может быть что-нибудь еще нужно, чтобы помочь вам в этом вопросе? Пожалуйста, помогите.

+0

Я выиграл это так: стороне клиента код JavaScript: вар Ws = новый WebSocket ("WS: // DOMAIN_NAME: 8080/serverendpointdemo/serverendpointdemo"); Полезные ссылки, если elseone получил его: [ссылка] (http://blog.martinandersson.com/making-a-java-ee-7-websocket-serverendpoint-class-discoverable/) [ссылка] (https://glassfish.java.net/docs/4.0/error-message-reference.pdf) [ссылка] (http://download.oracle.com/otn-pub/jcp/websocket-1_0-fr -eval-spec/JavaWebSocketAPI_1.0_Final.pdf? AuthParam = 1469574317_cf28b611d89626ae8c534e5f783409ca) – Rinat

+0

Это особенность сервера Glassfish. В GlassFish, если ваше приложение развернуто с помощью контекстного маршрута mycontextroot в веб-контейнере, прослушивающем порт 8080 localhost, WebSocket будет доступен с помощью ws: // localhost: 8080/mycontextroot/hello. Полный текст: [link] (http://www.oracle.com/technetwork/articles/java/jsr356-1937161.html) – Rinat

ответ

0

стороне сервера: @ServerEndpoint (значение = "/ WS") общественного класса WebSocketConfig {

private String message = ""; 
private String to = ""; 
private String from = ""; 
private static final Set<Session> sessions = Collections.synchronizedSet(new HashSet<Session>()); 

@OnOpen 
public void onOpen(Session session, EndpointConfig econfig) throws IOException {   
    System.out.println("New Web Socket Connection created"); 
    session.getBasicRemote().sendText("onOpen new socket connection");    
} 

@OnClose 
public void onClose(Session session) {  
     sessions.remove(session); 
} 

@OnMessage 
public void onMessage(String message, Session session) throws IOException { 

} 

стороне клиента:

на время соединения вы должны указать contextpath Var Ws = новый WebSocket ("ws: //" + document.location.host + "/" + your-contextPathName + "/ serverendpointdemo /");

Http: WS: // имя хоста: порт/contextpath/serverendpoint https: WSS: // имя хоста: порт/contextpath/serverendpoint

например: WS: //document.location.host+ "/ WebsocketDemo/WS ";

+0

Добавьте некоторое объяснение с ответом, как этот ответ поможет OP в устранении текущей проблемы –

Смежные вопросы