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){
}
}
это хорошо :), но как это Ws запрос досягаемость его назначения? как tomcat справился с этим? –
Это должно открыть соединение на стороне клиента. 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