当前位置:网站首页>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
边栏推荐
- Oracle non automatic submission solution
- 一文读懂数仓中的pg_stat
- ndk初学习(一)
- Excuse me, as shown in the figure, the python cloud function prompt uses the pymysql module. What's the matter?
- Es log error appreciation -limit of total fields
- Cascading update with Oracle trigger
- 搜索框效果的实现【每日一题】
- Wired network IP address of VMware shared host
- Leetcode - Sword finger offer 05 Replace spaces
- Vmware 与主机之间传输文件
猜你喜欢
Take you to master the three-tier architecture (recommended Collection)
XML文件的解析操作
Docker deploy Oracle
PERT图(工程网络图)
最长上升子序列模型 AcWing 482. 合唱队形
libSGM的horizontal_path_aggregation程序解读
内部排序——插入排序
GAN发明者Ian Goodfellow正式加入DeepMind,任Research Scientist
AI talent cultivation new ideas, this live broadcast has what you care about
最长上升子序列模型 AcWing 1012. 友好城市
随机推荐
請問,在使用flink sql sink數據到kafka的時候出現執行成功,但是kafka裏面沒有數
Leetcode——236. The nearest common ancestor of binary tree
UML 顺序图(时序图)
The longest ascending subsequence model acwing 482 Chorus formation
Common response status codes
Leetcode——236. 二叉树的最近公共祖先
IP and long integer interchange
oracle 触发器实现级联更新
Substance Painter笔记:多显示器且多分辨率显示器时的设置
常用数字信号编码之反向不归零码码、曼彻斯特编码、差分曼彻斯特编码
Huawei image address
Laravel5 call to undefined function OpenSSL cipher IV length() error php7 failed to open OpenSSL extension
[Reading stereo matching papers] [III] ints
低代码平台中的数据连接方式(下)
Verilog implementation of a simple legv8 processor [4] [explanation of basic knowledge and module design of single cycle implementation]
Similarities and differences between switches and routers
requires php ~7.1 -> your PHP version (7.0.18) does not satisfy that requirement
Es log error appreciation -limit of total fields
Reading and understanding of eventbus source code
杭电oj2054 A == B ? ???