现在AI工具这么火自己也整一个AI对话框,需要用到webSocket
如何接入ai组件可参考java对接阿里云通义千问API多轮对话承接上下文
1.maven添加jar包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
2.创建WebSocketConfig
package com.ruoyi.web.controller.app;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
@Configuration
public class WebSocketConfig {
@Bean
public ServerEndpointExporter serverEndpointExporter(){
return new ServerEndpointExporter();
}
}
3.创建WebSocketServer
package com.ruoyi.web.controller.app;
import java.io.IOException;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import org.springframework.stereotype.Component;
import com.alibaba.fastjson.JSONObject;
@Component
@ServerEndpoint("/webSocket/{username}")
public class WebSocketServer {
/**
* 该map用来存放每个用户对应的Session对象。
*/
private static Map<String, Session> clients = new ConcurrentHashMap<>();
/**
* 连接建立成功调用的方法
*/
@OnOpen
public void onOpen(@PathParam("username") String username, Session session) throws IOException {
if (username == null) {
return;
}
clients.put(username, session);
System.out.println("用户:" + username + "连接到websocke");
}
/**
* 连接关闭调用的方法
*/
@OnClose
public void onClose(@PathParam("username") String username) throws IOException {
clients.remove(username);
System.out.println("用户:" + username + "断开websocket");
}
@OnMessage
public void onMessage(String json) throws IOException {
System.out.println("前端发送的信息为:" + json);
JSONObject jsonObject = JSONObject.parseObject(json);
String user = jsonObject.getString("user");
String msg = jsonObject.getString("msg");
Session session = clients.get(user);
//如果这个好友在线就直接发给他
if (session != null) {
sendMessageTo(msg,session);
} else {
System.out.println("对方不在线,对方名字为:" + user);
}
}
/**
* 出现异常触发的方法
*/
@OnError
public void onError(Session session, Throwable error) {
error.printStackTrace();
}
/**
* 单发给某人
*/
public void sendMessageTo(String message, Session session) throws IOException {
session.getBasicRemote().sendText(message);
}
}
4.开始测试
代码写完后启动springboot开始测试
使用ApiPost工具进行测试
ws://localhost:80/webSocket/张三
用户张三链接到webSocket服务
张三向李四发送json数据{“msg”:“天王盖地虎。”,“user”:“李四”}
ws://localhost:80/webSocket/李四
李四也链接webSocket服务
这里可以看到接收的数据
并回复{“msg”:“小鸡炖蘑菇。”,“user”:“张三”}给张三
张三这边也对上了暗号对话完成。