当前位置:网站首页>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
边栏推荐
- The reason why data truncated for column 'xxx' at row 1 appears in the MySQL import file
- Is the spare money in your hand better to fry stocks or buy financial products?
- Realization of search box effect [daily question]
- 数据流图,数据字典
- [network security] SQL injection syntax summary
- 请问,如图,pyhon云函数提示使用了 pymysql模块,这个是怎么回事?
- Hangdian oj2054 a = = B? ???
- 用例图
- C # switch pages through frame and page
- bashrc与profile
猜你喜欢
通过 iValueConverter 给datagrid 的背景颜色 动态赋值
Wired network IP address of VMware shared host
用例图
常用數字信號編碼之反向不歸零碼碼、曼徹斯特編碼、差分曼徹斯特編碼
LeetCode每日一题(636. Exclusive Time of Functions)
PERT图(工程网络图)
JS get the current time, month, day, year, and the uniapp location applet opens the map to select the location
XML文件的解析操作
AutoCAD - how to input angle dimensions and CAD diameter symbols greater than 180 degrees?
Verilog implementation of a simple legv8 processor [4] [explanation of basic knowledge and module design of single cycle implementation]
随机推荐
常用数字信号编码之反向不归零码码、曼彻斯特编码、差分曼彻斯特编码
Pert diagram (engineering network diagram)
接口自动化测试-接口间数据依赖问题解决
Reverse non return to zero code, Manchester code and differential Manchester code of common digital signal coding
The reason why data truncated for column 'xxx' at row 1 appears in the MySQL import file
MySQL "invalid use of null value" solution
Redis 核心数据结构 & Redis 6 新特性详
Regular expression integer positive integer some basic expressions
Data flow diagram, data dictionary
OAuth 2.0 + JWT 保护API安全
杭电oj2054 A == B ? ???
Is the compass stock software reliable? Is it safe to trade stocks?
Codes de non - retour à zéro inversés, codes Manchester et codes Manchester différentiels couramment utilisés pour le codage des signaux numériques
CVPR2022 | 医学图像分析中基于频率注入的后门攻击
Leetcode - Sword finger offer 05 Replace spaces
Multi merchant mall system function disassembly lecture 01 - Product Architecture
First choice for stock account opening, lowest Commission for stock trading account opening, is online account opening safe
[AI practice] Application xgboost Xgbregressor builds air quality prediction model (II)
交换机和路由器的异同
LeetCode 648. Word replacement