websocket是H5新推出的协议,一般用于前端,但是在实际项目中我们需要用java代码来获取一些设备的实时运行数据,在后台处理后推送的前台界面,为了保证实时性,我们需要用到websocket协议,我们可以来实现java版的websocket client。
web项目启动一个websocket的的server和一个web端的client。然后另外也用websocket(这是很少人采用的一种方式)写一个java端的client。我们把这个client放在产生实际项目中产生数据的地方,通过client与server的连接,把异常消息推送到server,由server广播给web端实时显示。
服务端代码,及web client代码,请参考:
https://www.jianshu.com/p/9e9dd5127a12
Java WebSocket Client代码:
package com.zz.io.netty.server1_client;
import javax.websocket.ContainerProvider;
import javax.websocket.DeploymentException;
import javax.websocket.Session;
import javax.websocket.WebSocketContainer;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;
public class WebSocketClient {
private static String uri = "ws://localhost:9001/ws";
private static Session session;
private void start() {
WebSocketContainer container = null;
try {
container = ContainerProvider.getWebSocketContainer();
} catch (Exception ex) {
System.out.println("error: " + ex);
}
try {
URI r = URI.create(uri);
session = container.connectToServer(WebClientHandler.class, r);
} catch (DeploymentException | IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
WebSocketClient client = new WebSocketClient();
client.start();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = "";
try {
do {
input = br.readLine();
if (!input.equals("exit")) {
client.session.getBasicRemote().sendText("java client: " + input);
}
} while (!input.equals("exit"));
} catch (IOException e) {
e.printStackTrace();
}
}
}
package com.zz.io.netty.server1_client;
import javax.websocket.*;
@ClientEndpoint()
public class WebClientHandler {
@OnOpen
public void onOpen(Session session) {
System.out.println("已连接,请输入要发送的信息:");
}
@OnMessage
public void onMessage(String message) {
System.out.println("Client收到的消息: " + message);
}
@OnClose
public void onClose() {}
}
代码亲测通过,可以解决web端与java端的中转通信的功能,多个终端之间的通信这样就可以完成了。