我讨厌问这么模糊的问题,但我很难找到一个简单的例子。 这是我到目前为止所拥有的:
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 连接请求的嵌入式服务器?
更新:2024 年 10 月 17 日
Eclipse Jetty 项目现在拥有自己的顶级 github 组织。
旧组织中的示例已合并到一个新的示例项目中。
https://github.com/jetty/jetty-examples/
目前有 Jetty 版本
12.0.x
、11.0.x
、10.0.x
和 9.4.x
的分支(很快就会有 12.1.x
分支)。
每个都有自己的
/embedded/
子树,例如检查如何在嵌入式意义上使用 websocket。
例如,对于 Jetty 12,您有两种选择。
/embedded/ee10-websocket-jakarta-api/
- 适合需要 jakarta.websocket
API/embedded/ee10-websocket-jetty-api/
- 适合需要 org.eclipse.jetty.websocket
API 的用户。更新:2013 年 12 月 2 日
有关带有 WebSocket 的嵌入式 Jetty 的最新示例,请参阅:
https://github.com/jetty-project/embedded-jetty-websocket-examples
原答案
测试用例中找到了一个示例。
简短回答:
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 的教程,tutorial
祝你好运。