在Jetty中使用websocket

1.序言

在工作中,我们有时候需要使用能与前端实时通信传输以通信,这种技术就是由Socket实现的,而Socket又有短连接和长连接之分,长连接技术就是我们今天要介绍的websocket。

2.websocket服务启动设置

首先创建一个基于HTTP协议的 jetty Servlet server,Jetty通过WebSocketServlet和servlet桥接的使用,提供了将WebSocket端点到Servlet路径的对应。

内在地,Jetty管理HTTP升级到WebSocket,并且从一个HTTP连接移植到一个WebSocket连接。

这只有当运行在Jetty容器内部时才工作。

请输入图片描述

接下来,创建一个可用的webSocket对象

 

每一个WebApp都对应相应一个context,那么也就对应一个contextHandler,当servlet容器收到外部的http请求之后,会根据其请求的path信息来找到相应的webapplication来处理,也就是要找到对应的contextHandler来处理 ,这里也就知道了contextHandler的最重要的作用,那就是指定不同WebApp的路径,并将属于当前web的http请求交由内部对应的servlet来处理。

 

 

启动该server,并join使线程启动

join方法实际上是调用了jetty中的线程池,并堵塞当前线程使得server能够优先于当前线程启动,这样保证了server一定能够启动(如果没有join,那么在程序轻量级的情况下也能够正常运行,这是得益于Jetty启动速度非常快的原因,当application比较繁杂的时候,必须使用join函数保证server能够优先启动。)

 

 

到这里为止,所有的启动设置已经完成,你也可以直接构建Jetty Servlet,获取并创建一个webSocket的Lister或是Adapter,并从Jetty线程池中创建新的线程执行该server去启动它,这没有一个固定的格式,取决于你的业务逻辑与编码习惯。

3.websocket信息交互服务设置

WebSocketAdapter是一个比WebSocketListener更为强大的适配器,它可以提供完整有效的Session检查。

 

当然,Jetty也提供注解的方式实现这个设置,分别是:

@WebSocket 一个必须的类级别注释,表示这个类作为WebSocket;

@OnWebSocketClose 一个可选的方法级别注释,对应关闭webSocket时执行;

@OnWebSocketConnect 一个可选的方法级别注释,对应打开webSocket时执行;

@OnWebSocketMessage 一个可选的方法级别注释,对应接收消息时执行;

@OnWebSockError 一个可选的方法级别注释,对应webSocket出现error事件时执行。

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Jetty 是一个流行的 Java Web 服务器和 Servlet 容器,它也提供了对 WebSocket 的支持。下面是一个简单的示例,展示了如何在 Jetty 使用 WebSocket: 1. 首先,确保你已经在项目添加了 Jetty 的依赖。可以通过 Maven 或者其他构建工具来添加依赖。这里以 Maven 为例,在 pom.xml 文件添加以下代码: ```xml <dependencies> <dependency> <groupId>org.eclipse.jetty.websocket</groupId> <artifactId>websocket-server</artifactId> <version>xxx</version> </dependency> </dependencies> ``` 请将 `xxx` 替换为你所需的 Jetty 版本号。 2. 创建一个 WebSocketHandler 类来处理 WebSocket 请求。这个类需要继承自 Jetty 的 `WebSocketHandler` 类,并实现 `onWebSocketConnect`、`onWebSocketText` 和 `onWebSocketClose` 方法。例如: ```java import org.eclipse.jetty.websocket.api.*; import org.eclipse.jetty.websocket.api.annotations.*; import org.eclipse.jetty.websocket.server.*; @WebSocket public class MyWebSocketHandler extends WebSocketHandler { @Override public void configure(WebSocketServletFactory factory) { factory.register(MyWebSocketHandler.class); } @OnWebSocketConnect public void onConnect(Session session) { // 连接建立时触发 } @OnWebSocketText public void onText(Session session, String message) { // 接收到文本消息时触发 } @OnWebSocketClose public void onClose(Session session, int statusCode, String reason) { // 连接关闭时触发 } } ``` 3. 创建一个 Jetty 服务器并配置 WebSocketHandler。例如: ```java import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.handler.HandlerList; public class WebSocketServer { public static void main(String[] args) throws Exception { Server server = new Server(8080); WebSocketHandler webSocketHandler = new MyWebSocketHandler(); HandlerList handlers = new HandlerList(); handlers.addHandler(webSocketHandler); server.setHandler(handlers); server.start(); server.join(); } } ``` 4. 启动服务器,你的 WebSocket 服务就可以在 `ws://localhost:8080/` 上监听连接请求并处理消息了。 这只是一个简单的示例,你还可以根据自己的需求进行更复杂的定制和扩展。希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值