【发布时间】:2015-12-07 18:46:12
【问题描述】:
我是 WebSockets 的新手。为了开始学习,我关注了this 教程。并简单地复制 ClientEndpoint 和 ServerEndpoint 并使用 tyrus 部署服务器。
但是当我尝试运行服务器时,它会抛出这个错误:
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 库的方式,这更容易处理。
-
哦好吧..我们的捆绑是不同的,因为我们使用 Apache karaf 进行捆绑,问题似乎是类加载器没有加载这个 GrizzlyEngine(它的 OSGI 框架问题)。如果作为独立应用程序运行,这个 jar 恰好运行良好。您是将该应用作为独立应用运行还是在 Web 容器内运行?
-
不,我只是作为独立应用尝试过。