簡體   English   中英

如何創建嵌入式WebSocket服務器Jetty 9?

[英]How do I create an embedded WebSocket server Jetty 9?

我討厭問這么模糊的問題,但我很難找到一個簡單的例子。 這是我到目前為止所擁有的:

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示例總是顯示如下所示,以啟動Server實例運行,但我不知道如何實例化我的WebSocketServlet。

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

如何創建可以處理WebSocket連接請求的嵌入式服務器?

更新:2013年12月2日

有關使用WebSocket的Embedded 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/實例/回波/ 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綁定到另一個上下文,請將其包裝在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綁定到

http://localhost:8080/echo/

這是servlet方法:

1)在這種情況下,不需要使用此代碼(它是容器責任):

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

2)為servlet創建web.xml描述符:

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
    <display-name>WebSocket application</display-name>
    <servlet>
        <servlet-name>servlet</servlet-name>
        <servlet-class>com.example.websocket.JettyWebSocketServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>servlet</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
</web-app>

現在,當你寫JS時:

var ws = new WebSocket("ws://localhost:8080/hello");
ws.send("text");

使用MyEchoSocket的onText方法處理消息

這是更多了解servlet的教程教程

祝好運。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM