Netty实战2——Java WebSocket Client

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端的中转通信的功能,多个终端之间的通信这样就可以完成了。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容