websocket客户端原生实现

本文详细介绍了如何在不使用Spring框架的情况下,通过原生Java WebSocket库实现实时通信,并配合Fastjson处理JSON数据。从依赖引入、WebSocketClient类创建到主函数启动,一步步教你搭建WebSocket客户端。

前言

公司今天要求实现websocket的通信,毕竟不是第一次接触这个了,当时觉得应该写的挺快的,但是组长说不能用spring那套框架,只能用原生的,愁死我了,找了半天没找到,官方文档也没找到(太菜了)。后来询问了一下主程看了一个链接终于搞好了,这是一个原生的socket的客户端。

**

代码实现

**
首先要导入依赖,为了方便处理也导入了一个处理json数据的依赖,如果习惯用别的也可以替换fastjson。

         <dependency>
            <groupId>org.java-websocket</groupId>
            <artifactId>Java-WebSocket</artifactId>
            <version>1.3.8</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.75</version>
        </dependency>

创建socket类

import java.net.URI;
import com.alibaba.fastjson.JSONObject;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.handshake.ServerHandshake;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 *  websocket客户端监听类
 * @author 。
 */
public class MyWebSocketClient extends WebSocketClient {

    private static Logger logger = LoggerFactory.getLogger(MyWebSocketClient.class);

    public MyWebSocketClient(URI serverUri) {
        super(serverUri);
    }

    @Override
    public void onOpen(ServerHandshake serverHandshake) {
    //如果连接成功后也有业务写在这里
        logger.info(">>>>>>>>>>>websocket open");
    }

    @Override
    public void onMessage(String s) {
    //在这里接收消息并处理业务 如下    ResultMessage这是楼主自己封装的实体类可以替换成自己的 
    JSONObject jsonObject = JSONObject.parseObject(s);
    ResultMessage resultMessage = jsonObject.toJavaObject(ResultMessage.class);
        logger.info(">>>>>>>>>> websocket message");
       
    }

    @Override
    public void onClose(int i, String s, boolean b) {
    //如果连接关闭后也有业务写在这里
        logger.info(">>>>>>>>>>>websocket close");
    }

    @Override
    public void onError(Exception e) {
    //如果报错后也有业务写在这里
        logger.error(">>>>>>>>>websocket error {}",e);
    }


}

启动客户端

 //在主函数中启动即可
 public static void main(String[] args) {
        try {
        //ws://192.168.2.20:8080将这个替换成自己配置的链接地址
            MyWebSocketClient myClient = new MyWebSocketClient(new URI("ws://192.168.2.20:8080"));
            myClient.connect();
            //连接失败会一直重连,如果不符合业务逻辑可以自行更改
            while (!myClient.getReadyState().equals(WebSocket.READYSTATE.OPEN)) {
                System.out.println("连接中。。。");
                Thread.sleep(1000);
            }
            // 连接成功往websocket服务端发送数据
            JSONObject object = new JSONObject();
            object.put("message", "success连接");
            myClient.send(object.toJSONString());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

好啦,到这里就结束啦!!!

对了,原文链接在这里:感谢这位老哥

希望能帮到你,如果有错误的话请斧正。

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值