2016-10-21 2 views
-1

Я изучаю Websocket сейчас. Мне нужны некоторые разъяснения. Я использую websocket с tomcat.Уточнение на websocket

Как tomcat сопоставляет запросы websocket к определенному классу java. для примера, мы можем предоставить класс сервлета в web.xml. Но как это работает для websocket?

ответ

0

1 Javascript: Объявить переменные для websocket следующим образом: var websocket; var address = "ws: // localhost: 8080/appName/MyServ";

обратите внимание, что APPNAME ваше имя приложения и MyServ является Endpoint

также в скрипте добавить функцию, чтобы открыть соединение:

var websocket; 
var address = "ws://localhost:8080/appName/MyServ"; 
function openWS() { 

    websocket = new WebSocket(address); 
    websocket.onopen = function(evt) { 
     onOpen(evt) 
    }; 
    websocket.onmessage = function(evt) { 
     onMessage(evt) 
    }; 
    websocket.onerror = function(evt) { 
     onError(evt) 
    }; 
    websocket.onclose = function(evt) { 
     onClose(evt) 
    }; 
} 

function onOpen(evt) { 
    // what will happen after opening the websocket 
} 

function onClose(evt) { 
    alert("closed") 
} 
function onMessage(evt) { 
    // what do you want to do when the client receive the message? 
    alert(evt.data); 
} 

function onError(evt) { 
    alert("err!") 
} 

function SendIt(message) { 
// call this function to send a msg 
    websocket.send(message); 
} 

2- На стороне сервера, вам необходимо ServerEndpoint : Я называю это myServ в сценарии выше.

сейчас, я думаю, что это именно то, что вам нужно:

Объявить любого класса WebSocket конечной точки сервера Java POJO по аннотирования его с @ServerEndpoint

import java.io.IOException 
import javax.servlet.ServletContext; 
import javax.websocket.OnClose; 
import javax.websocket.OnError; 
import javax.websocket.OnMessage; 
import javax.websocket.OnOpen; 
import javax.websocket.Session; 
import javax.websocket.server.ServerEndpoint; 

@ServerEndpoint(value="/MyServ") 
public class MyServ{ 
    @OnMessage 
    public void onMessage(Session session, String msg) throws IOException { 
     // todo when client send msg 
     // tell the client that you received the message! 
     try { 
      session.getBasicRemote().sendText("I got your message :"+ msg); 
     } catch (IOException e) { 
      throw new RuntimeException(e); 
     } 


    } 

    @OnOpen 
    public void onOpen (Session session) { 
     // tell the client the connection is open! 

    try { 
      session.getBasicRemote().sendText("it is open!"); 
     } catch (IOException e) { 
      throw new RuntimeException(e); 
     } 
    } 

    @OnClose 
    public void onClose (Session session) { 
     System.out.println("websocket closed"); 

    } 

    @OnError 
    public void onError (Session session){ 

    } 
} 
+0

это хорошо :), но как это Ws запрос досягаемость его назначения? как tomcat справился с этим? –

+0

Это должно открыть соединение на стороне клиента. Websocket = новый WebSocket («ws: // localhost: 8080/appName/MyServ»); , а затем на стороне сервера есть ServerEndpoint, @ServerEndpoint (значение = "/ MyServ"). Tomcat ищет запрос заголовка и для соответствия URI. Посмотрите на это http://stackoverflow.com/questions/26103939/how-tomcat-8-handles-websocket-upgrade-request – MedoMe