当前位置:网站首页>Simple use of websocket
Simple use of websocket
2022-07-07 14:23:00 【LLAiden】
Introduce
WebSocket It's one in a single TCP Connect to carry on full duplex Communication protocol .WebSocket The communication protocol is 2011 By the IETF Set it as a standard RFC 6455, And by the RFC7936 Supplementary specifications .WebSocket API Also by W3C Set it as a standard .
WebSocket Makes it easier to exchange data between client and server , Allows the server to actively push data to the client . stay WebSocket API in , The browser and the server only need to complete a handshake , A persistent connection can be created directly between the two , And two-way data transmission
After the introduction, go directly to the code
Server side
public class WebSocketServerDemo {
static SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static void main(String[] args) {
WebSocketServer webSocketServer = new WebSocketServer() {
@Override
public void onOpen(WebSocket conn, ClientHandshake handshake) {
System.out.println("welcome webSocket...");
}
@Override
public void onClose(WebSocket conn, int code, String reason, boolean remote) {
System.out.println("close webSocket...");
}
@Override
public void onMessage(WebSocket conn, String message) {
System.out.println("received client message: " + message);
conn.send(simpleDateFormat.format(new Date()));
}
@Override
public void onError(WebSocket conn, Exception ex) {
ex.printStackTrace();
}
@Override
public void onStart() {
System.out.println("websocket start");
}
};
webSocketServer.start();
}
}
client
public class WebSocketClientDemo {
public static void main(String[] args) throws URISyntaxException {
WebSocketClient webSocketClient = new WebSocketClient(new URI("ws://localhost:80")) {
@Override
public void onOpen(ServerHandshake handshakedata) {
String httpStatusMessage = handshakedata.getHttpStatusMessage();
System.out.println("httpStatusMessage: " + httpStatusMessage);
}
@Override
public void onMessage(String message) {
System.out.println("received server message: " + message);
}
@Override
public void onClose(int code, String reason, boolean remote) {
System.out.println("close code: " + code);
System.out.println("close reason: " + reason);
System.out.println("close remote: " + remote);
}
@Override
public void onError(Exception ex) {
ex.printStackTrace();
}
};
webSocketClient.connect();
Timer timer = new Timer();
timer.schedule(new TimerTask() {
int count = 0;
@Override
public void run() {
if (webSocketClient.isOpen()) {
webSocketClient.send(String.valueOf(count++));
}
}
}, 1000, 1000);
}
okhttp Version client
OkHttpClient okHttpClient = new OkHttpClient.Builder().build();
Request request = new Request.Builder()
.url("ws://localhost:80")
.get()
.build();
WebSocket webSocket = okHttpClient.newWebSocket(request, new WebSocketListener() {
@Override
public void onFailure(@NotNull WebSocket webSocket, @NotNull Throwable t, @Nullable Response response) {
t.printStackTrace();
}
@Override
public void onMessage(@NotNull WebSocket webSocket, @NotNull String text) {
System.out.println("received server message: " + text);
}
@Override
public void onMessage(@NotNull WebSocket webSocket, @NotNull ByteString bytes) {
String text = bytes.base64();
System.out.println("received server message: " + text);
}
@Override
public void onOpen(@NotNull WebSocket webSocket, @NotNull Response response) {
System.out.println(response);
}
});
Timer timer = new Timer();
timer.schedule(new TimerTask() {
int count = 0;
@Override
public void run() {
webSocket.send(String.valueOf(count++));
}
}, 1000, 1000);
}
Running effect
Code address : https://github.com/LLAiden/webSocketDemo
Using open source libraries in code : 'org.java-websocket:Java-WebSocket:1.5.2'
Open source library address : https://github.com/TooTallNate/Java-WebSockethttps://github.com/TooTallNate/Java-WebSocket
边栏推荐
- libSGM的horizontal_path_aggregation程序解读
- Hands on Teaching: XML modeling
- Excuse me, as shown in the figure, the python cloud function prompt uses the pymysql module. What's the matter?
- Arm cortex-a9, mcimx6u7cvm08ad processor application
- Vscode configuration uses pylint syntax checker
- NDK beginner's study (1)
- 请问,我kafka 3个分区,flinksql 任务中 写了 join操作,,我怎么单独给join
- C # switch pages through frame and page
- First choice for stock account opening, lowest Commission for stock trading account opening, is online account opening safe
- 3D detection: fast visualization of 3D box and point cloud
猜你喜欢
VSCode 配置使用 PyLint 语法检查器
常用数字信号编码之反向不归零码码、曼彻斯特编码、差分曼彻斯特编码
Details of redis core data structure & new features of redis 6
UML sequence diagram (sequence diagram)
Selenium库
Introduction to sakt method
[Reading stereo matching papers] [III] ints
常用數字信號編碼之反向不歸零碼碼、曼徹斯特編碼、差分曼徹斯特編碼
LeetCode 648. 单词替换
JS get the current time, month, day, year, and the uniapp location applet opens the map to select the location
随机推荐
设备故障预测机床故障提前预警机械设备振动监测机床故障预警CNC震动无线监控设备异常提前预警
Leetcode——344. Reverse string /541 Invert string ii/151 Reverse the word / Sword finger in the string offer 58 - ii Rotate string left
Attribute keywords aliases, calculated, cardinality, ClientName
杭电oj2092 整数解
手里的闲钱是炒股票还是买理财产品好?
CVPR2022 | 医学图像分析中基于频率注入的后门攻击
SSRF vulnerability file pseudo protocol [netding Cup 2018] fakebook1
Advanced Mathematics - Chapter 8 differential calculus of multivariate functions 1
OAuth 2.0 + JWT protect API security
JS get the current time, month, day, year, and the uniapp location applet opens the map to select the location
Cascading update with Oracle trigger
MySQL "invalid use of null value" solution
The longest ascending subsequence model acwing 482 Chorus formation
多商户商城系统功能拆解01讲-产品架构
Huawei image address
Verilog implementation of a simple legv8 processor [4] [explanation of basic knowledge and module design of single cycle implementation]
ARM Cortex-A9,MCIMX6U7CVM08AD 处理器应用
Demis Hassabis谈AlphaFold未来目标
libSGM的horizontal_path_aggregation程序解读
Vscode configuration uses pylint syntax checker