java - 如何创建嵌入式 WebSocket 服务器 Jetty 9?

标签 java websocket jetty embedded-jetty

我讨厌问这样一个模糊的问题,但我很难找到一个简单的例子。这是我目前所拥有的:

public class JettyWebSocketServlet extends WebSocketServlet{
    @Override
    public void configure(WebSocketServletFactory factory) {
        factory.register(MyEchoSocket.class);
    }
}

@WebSocket
public class MyEchoSocket {
    @OnWebSocketMessage
    public void onText(WebSocketConnection conn, String message) {
        System.out.println("text: " + message);
        try {
            conn.write(null, new FutureCallback(), "got: " + message);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

我可以找到的嵌入式 Jetty 示例总是显示如下内容,以启动服务器实例运行,但我不知道如何实例化我的 WebSocketServlet。

        Server server = new Server(8080);
        server.start();
        server.join();

如何创建可以处理 WebSocket 连接请求的嵌入式服务器?

最佳答案

更新:2013 年 12 月 2 日

有关使用 WebSocket 的嵌入式 Jetty 的最新示例,请参阅:

https://github.com/jetty-project/embedded-jetty-websocket-examples

原答案

在测试用例中有一个例子。

http://git.eclipse.org/c/jetty/org.eclipse.jetty.project.git/tree/jetty-websocket/websocket-server/src/test/java/org/eclipse/jetty/websocket/server/examples/echo/ExampleEchoServer.java

简答:

Server server = new Server(8080);
WebSocketHandler wsHandler = new WebSocketHandler()
    {
        @Override
        public void configure(WebSocketServletFactory factory)
        {
            factory.register(MyEchoSocket.class);
        }
    };
server.addHandler(wsHandler);
server.start();
server.join();

这将创建一个简单的服务器来处理 1 个上下文,即根上下文。

http://localhost:8080/

如果要将 WebSocketHandler 绑定(bind)到另一个上下文,请将其包装在 ContextHandler 中。

Server server = new Server(8080);
WebSocketHandler wsHandler = new WebSocketHandler()
    {
        @Override
        public void configure(WebSocketServletFactory factory)
        {
            factory.register(MyEchoSocket.class);
        }
    };
ContextHandler context = new ContextHandler();
context.setContextPath("/echo");
context.setHandler(wsHandler);
server.addHandler(context);
server.start();
server.join();

这会将你的 websocket 绑定(bind)到

http://localhost:8080/echo/

关于java - 如何创建嵌入式 WebSocket 服务器 Jetty 9?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15645341/

相关文章:

Java,尽管位于同一个包中,但未定义类型的方法

go - 在处理另一个 channel 时尝试将数据发送到一个 channel 时,Gorilla Websocket示例挂起?

java - 为什么我的计时器任务不能用于Discord API包装器?

java - 在 Selenium Webdriver 中,ExpectedCondition.elementToBeClickable 不会等到进度条消失

java - OrientDB:删除使用对象 API 创建的记录和引用

Java - 创建网络浏览器

jakarta-ee - 如何将 Weld 嵌入 jetty 9 以在我的 java maven 项目中使用 cdi?

java - Jetty/SOLR 管理面板密码

tomcat - gwt Comet 更容易在 jetty 或 tomcat 上实现?

java - 无法将 .jks 转换为 .pkcs12 : excess private key