添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

java服务端如何作为客户端实现websocket?

上一篇文章中,写了如何使用java来实现服务端的websocket,但有时候服务端也会作为client客户端来去请求前端,这个时候服务端就是一个clent客户端,前端则成了服务端。那么这时候的websocket代码明显是不一样的,因为虽然同样是java后台,但却是一个作为服务端、一个作为客户端。那么今天就来接着上篇java端作为服务端实现websocket后,再实现一个java端作为客户端来实现websocket,代码实现流程如下:

引入Maven jar包

<!--websocket作为客户端-->
<dependency>
    <groupId>org.java-websocket</groupId>
    <artifactId>Java-WebSocket</artifactId>
    <version>1.5.2</version>
</dependency>

我们需要创建一个Java WebSocketClient 的类

@Slf4j
@Component
public class JavaClient {
     * 获取客户端连接实例
     * @param uri
     * @return
    public static WebSocketClient getClient(String userId, String uri) {
        try {
            //创建客户端连接对象
            WebSocketClient client = new WebSocketClient(new URI(uri), new Draft_6455()) {
                 * 建立连接调用
                 * @param serverHandshake
                @Override
                public void onOpen(ServerHandshake serverHandshake) {
                    log.info("-------------与大模型建立连接-------------");
                 * 收到服务端消息调用
                 * @param s
                @Override
                public void onMessage(String s) {
                    log.info("收到来自服务端的消息:" + s);
                    //4、收到服务端消息
                    WebSocketHandler.sendOneMessage(userId, s);
                 * 断开连接调用
                 * @param i
                 * @param s
                 * @param b
                @Override
                public void onClose(int i, String s, boolean b) {
                    log.info("关闭连接:::" + "i = " + i + ":::s = " + s + ":::b = " + b);
                 * 连接报错调用
                 * @param e
                @Override
                public void onError(Exception e) {
                    log.error("报错了:::" + e.getMessage());
             *  请求与服务端建立连接
            client.connect();
            //判断连接状态,0为请求中  1为已建立  其它值都是建立失败
            while (client.getReadyState().ordinal() == WebSocket.READ_OPEN.getCode()) {
                try {
                    Thread.sleep(200);
                } catch (Exception e) {
                    log.warn("延迟操作出现问题,但并不影响功能");
                log.info("-------------大模型连接中-------------");
            //连接状态不再是0请求中,判断建立结果是不是1已建立
            if (client.getReadyState().ordinal() == WebSocket.CONNECT.getCode()) {
                log.info("---------大模型连接成功----------");
                return client;
        } catch (URISyntaxException e) {
            log.error(e.getMessage());
        return null;

相关的代码已经实现了,我们可以再写一个测试类,来调用该类。通过参数传入来调前端。

WebSocketClient client = JavaClient.getClient(userId, serverIP);
if (client != null) {
    JSONObject object = new JSONObject();
    object.put("", message);
    String[][] strings = {{"aaa"}};
    object.put("history", strings);
    object.put("knowledge_base_id", "/home/nemo/aigc/langchain-ChatGLM/vector_store/knowledge_FAISS_20230516_133609");
    //3、发送问题
    client.send(object.toString());

userId:用户ID; serverIP:调用的IP; message:传入的参数; history:前后端协商的参数; knowlede_base_id:也是前后端相关的协商的参数;

Android AppcompateImageView 详解 android:orderincategory

一、 使用xml定义Menu菜单资源文件必须放在res/menu目录中。菜单资源文件必须使用 标签外,还有另外两个标签用于设置菜单项和分组,这两个标签是和。 标签没有任何属性,但可以嵌套在标签中,表示子菜单的形式。不过标签中不能再嵌入标签。 1.标签的属性含义如下:Id:表示菜单项的资源IDmenuCategory:同种菜单项的种类。该属性可取4个值:container、syste