当前位置:网站首页>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
边栏推荐
- C # switch pages through frame and page
- Substance Painter笔记:多显示器且多分辨率显示器时的设置
- Es log error appreciation -limit of total fields
- 请问,redis没有消费消息,都在redis里堆着是怎么回事?用的是cerely 。
- Leetcode——344. Reverse string /541 Invert string ii/151 Reverse the word / Sword finger in the string offer 58 - ii Rotate string left
- [AI practice] Application xgboost Xgbregressor builds air quality prediction model (II)
- 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
- LeetCode 648. 单词替换
- 小程序目录结构
- Cargo placement problem
猜你喜欢
设备故障预测机床故障提前预警机械设备振动监测机床故障预警CNC震动无线监控设备异常提前预警
OAuth 2.0 + JWT 保护API安全
Navigation — 这么好用的导航框架你确定不来看看?
SSRF vulnerability file pseudo protocol [netding Cup 2018] fakebook1
Pert diagram (engineering network diagram)
LeetCode 648. Word replacement
手把手教会:XML建模
通过 iValueConverter 给datagrid 的背景颜色 动态赋值
Vmware 与主机之间传输文件
多商戶商城系統功能拆解01講-產品架構
随机推荐
Csma/cd carrier monitoring multipoint access / collision detection protocol
Docker deploy Oracle
Similarities and differences between switches and routers
Redis 核心数据结构 & Redis 6 新特性详
通过 iValueConverter 给datagrid 的背景颜色 动态赋值
IP and long integer interchange
CVPR2022 | 医学图像分析中基于频率注入的后门攻击
常用数字信号编码之反向不归零码码、曼彻斯特编码、差分曼彻斯特编码
Parsing of XML files
Wired network IP address of VMware shared host
搜索框效果的实现【每日一题】
LeetCode 648. Word replacement
课设之百万数据文档存取
Cargo placement problem
股票开户首选,炒股交易开户佣金最低网上开户安全吗
Laravel5 call to undefined function OpenSSL cipher IV length() error php7 failed to open OpenSSL extension
Excuse me, as shown in the figure, the python cloud function prompt uses the pymysql module. What's the matter?
Search engine interface
Reverse non return to zero code, Manchester code and differential Manchester code of common digital signal coding
最长上升子序列模型 AcWing 1012. 友好城市