im new to WebSockets
. для начала обучения я последовал за this учебником. и просто скопировали ClientEndpoint
и ServerEndpoint
и развернули сервер с tyrus
.Не удалось загрузить класс поставщика контейнеров: org.glassfish.tyrus.container.grizzly.GrizzlyEngine
, но когда я пытаюсь запустить сервер он будет бросать эту ошибку:
Failed to load container provider class: org.glassfish.tyrus.container.grizzly.GrizzlyEngine
здесь код развертывания (я уже комментировал линию, я получаю ошибку):
import java.io.BufferedReader;
import java.io.InputStreamReader;
import org.glassfish.tyrus.server.Server;
public class WebSocketServer {
public static void main(String[] args) {
runServer();
}
public static void runServer() {
Server server = new Server("localhost", 8000, "/websockets", WordgameServerEndpoint.class);
try {
server.start(); //i get the error on this line
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Please press a key to stop the server.");
reader.readLine();
} catch (Exception e) {
System.out.println(e.getMessage());
} finally {
server.stop();
}
}
}
здесь код сервера:
import java.io.IOException;
import java.util.logging.Logger;
import javax.websocket.CloseReason;
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.CloseReason.CloseCodes;
import javax.websocket.server.ServerEndpoint;
@ServerEndpoint(value = "/game")
public class WordgameServerEndpoint {
private Logger logger = Logger.getLogger(this.getClass().getName());
@OnOpen
public void onOpen(Session session) {
logger.info("Connected ... " + session.getId());
}
@OnMessage
public String onMessage(String message, Session session) {
switch (message) {
case "quit":
try {
session.close(new CloseReason(CloseCodes.NORMAL_CLOSURE, "Game ended"));
} catch (IOException e) {
throw new RuntimeException(e);
}
break;
}
return message;
}
@OnClose
public void onClose(Session session, CloseReason closeReason) {
logger.info(String.format("Session %s closed because of %s", session.getId(), closeReason));
}
}
я был бы признателен за любую помощь :)
Вы могли решить это? –
нет нет действительно. Я поменял свой путь на OkHTTP-библиотеку, с которой было намного легче справиться. –
oh ok .. Наша комплектация отличается тем, что мы используем Apache karaf для комплектации, и проблема, похоже, связана с загрузчиками классов, не загружающими этот GrizzlyEngine (проблема с базой OSGI). Эта банка работает нормально, если работать как автономное приложение. Вы запустили это приложение как самостоятельное приложение или внутри веб-контейнера? –