jFinal下WebSocket的使用

1.引入jar包

maven方式

		<!-- https://mvnrepository.com/artifact/io.undertow/undertow-websockets-jsr -->
		<dependency>
			<groupId>io.undertow</groupId>
			<artifactId>undertow-websockets-jsr</artifactId>
			<version>2.2.2.Final</version>
		</dependency>

直接下载
下载链接

2.修改启动方式

之前的启动方式可能是这样

UndertowServer.start(DemoConfig.class);

这是使用UndertowServer时的启动,之前版本的不太记得了
现在需要修改成这样

UndertowServer.create(DemoConfig.class).configWeb(builder -> {
builder.addWebSocketEndpoint("com.demo.socket.MWebSocket");
}).start();

其中com.demo.socket.MyWebSocket这是需要自己去实现的一个socket类,以处理与客户端的交互

3.编写socket类

package com.mmmushroom.socket;

import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
//这里用来标注这是websocket类
@ServerEndpoint("/mysocket.ws")
public class MWebSocket {
	//这里用来接收客户端发送的消息
	@OnMessage
	public void message(String message, Session session) {
		
	}
	//当连接关闭时会调用这个方法
	@OnClose
	public void close(Session session) {
	}
	//当连接建立时会调用这个方法
	@OnOpen
	public void open(Session session) {
	}
	//当发生错误时调用这个方法
	@OnError
	public void error(Session session,Throwable throwable) {
	}

}

注解应该都能见名知意,其中@ServerEndpoint中的参数为客户端访问的路径,类似于springboot的@RequestMapping

4.页面编写

这次页面就一切从简了

<div>
	<button onclick="sendMessage()"> 发送消息</button>
</div>
<script>
	var socket;
	//首先判断是否支持WebSocket
	if (window.WebSocket) {
		//这里用来新建一个socket连接
		//ws:// 为前缀,类似于http://其中ws就是websocket的缩写
		//127.0.0.1:9999 这是IP地址加端口号,应该不用大说明
		//socket.ws 这是在socket类@ServerEndpoint注解中的参数
		socket = new WebSocket("ws://127.0.0.1:9999/socket.ws");
		//下面四个方法理应见名知意,同java类中的功能
		//接受消息后的操作
		socket.onmessage = function(event) {
			//独立出了一个方法来执行接收消息后的操作
			message(event.data);
		};
		//打开连接后的操作
		socket.onopen = function(event) {
			console.log(event);
		};
		//关闭连接后的操作
		socket.onclose = function(event) {
			console.log(event);
		};
		//发生异常时的操作
		socket.onerror = function(event) {
			console.log(event);
		};
	} else {
		alert("NO");
	}

	function message(data) {
		console.log(data)
	}
	//向服务器发送消息
	function sendMessage() {
		socket.send('Hello world!!!')
	}
</script>

其中大部分解释都写在注释中了

5.实践一下

java类加入打印

	@OnMessage
	public void message(String message, Session session) {
		System.out.println("message:" + session.getId() + "-" + message);
		//通过session向客户端发送消息
		session.getAsyncRemote().sendText("Hello websocket!!!");
	}

	@OnClose
	public void close(Session session) {
		System.out.println("close:" + session.getId());
	}

	@OnOpen
	public void open(Session session) {
		System.out.println("open:" + session.getId());
	}

	@OnError
	public void error(Session session, Throwable throwable) {
		System.out.println("error:" + session.getId());
	}

页面保持不变了就

1. 启动服务器
在这里插入图片描述

2. 打开前端页面
因为直接写在了script标签中,一打开页面,自动连接,并触发了onopen
在这里插入图片描述
服务端也是如此
在这里插入图片描述
3. 发送消息

首先点击页面按钮
在这里插入图片描述服务端接收到了页面发送的消息
在这里插入图片描述
同时页面也得到了反馈

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在JFinal使用WebSocket,您需要使用jfinal-undertow插件。此插件基于Undertow服务器,并提供了WebSocket支持。 以下是一个简单的示例: 1. 首先,您需要在pom.xml文件中添加以下依赖项: ``` <dependency> <groupId>com.jfinal</groupId> <artifactId>jfinal-undertow</artifactId> <version>1.7</version> </dependency> ``` 2. 在您的JFinal配置文件中,添加以下代码以启用Undertow插件: ``` public class AppConfig extends JFinalConfig { public void configConstant(Constants me) {} public void configRoute(Routes me) {} public void configPlugin(Plugins me) {} public void configInterceptor(Interceptors me) {} public void configHandler(Handlers me) { me.add(new WebSocketHandler("/websocket", MyWebSocketHandler.class)); } } ``` 在此配置中,我们将WebSocketHandler添加到Handlers列表中,并将其映射到“/ websocket”路径。MyWebSocketHandler是您自己实现的WebSocket处理程序。 3. 创建MyWebSocketHandler类,并实现onOpen,onClose和onMessage方法: ``` public class MyWebSocketHandler extends WebSocketHandler { @Override public void onOpen(WebSocketContext webSocketContext) throws IOException { System.out.println("WebSocket opened"); } @Override public void onClose(WebSocketContext webSocketContext) throws IOException { System.out.println("WebSocket closed"); } @Override public void onMessage(WebSocketContext webSocketContext) throws IOException { String message = webSocketContext.getMessage(); System.out.println("Received message: " + message); webSocketContext.send("Echo: " + message); } } ``` 在此示例中,我们仅打印一些日志并回显收到的消息。 4. 在您的JFinal应用程序中,您可以像这样使用WebSocket: ``` WebSocketClient client = new WebSocketClient(new URI("ws://localhost:8080/websocket")); client.connect(); client.sendMessage("Hello, world!"); client.close(); ``` 在此代码中,我们创建了一个WebSocketClient实例,并使用ws://localhost:8080/websocket连接到WebSocket服务器。我们发送了一条消息“Hello, world!”,并关闭了连接。 这是一个简单的示例,您可以根据您的需求进行更改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值