前言
公司今天要求实现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;
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) {
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 {
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);
}
JSONObject object = new JSONObject();
object.put("message", "success连接");
myClient.send(object.toJSONString());
} catch (Exception e) {
e.printStackTrace();
}
}
好啦,到这里就结束啦!!!
对了,原文链接在这里:感谢这位老哥
希望能帮到你,如果有错误的话请斧正。
|