JAVA 使用WebSocket发送通知消息

这篇具有很好参考价值的文章主要介绍了JAVA 使用WebSocket发送通知消息。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

注:

1、jdk必须要1.8及以上

2、项目若有接口拦截过滤,WebSocket接口必须要配置拦截,使其可以验证通过

接口:@ServerEndpoint("/webSocket/{username}"),在拦截处配置 /webSocket/*

WebSocket 业务类

import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import javax.websocket.*;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.concurrent.CopyOnWriteArraySet;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * @author zhouhz
 * @date
 */
@Slf4j
@Component
@ServerEndpoint("/webSocket/{username}")
public class WebSocketServer {

    private static final AtomicInteger ONLINE_COUNT = new AtomicInteger(0);
    private static CopyOnWriteArraySet<WebSocketServer> webSocketSet = new CopyOnWriteArraySet<>();
    private Session session;
    private String username;

    /**
     * 连接成功后调用的方法
     * @param username
     * @param session
     * @throws IOException
     */
    @OnOpen
    public void onOpen(@PathParam("username") String username, Session session) throws IOException {
        this.username = username;
        this.session = session;

        webSocketSet.add(this);
        // 在线数加1
        int cnt = ONLINE_COUNT.incrementAndGet();
        log.info("{}加入连接,当前连接数为:{}", username, cnt);

    }

    /**
     * 连接关闭调用的方法
     * @throws IOException
     */
    @OnClose
    public void onClose() throws IOException {
        webSocketSet.remove(this);
        int cnt = ONLINE_COUNT.decrementAndGet();
        log.info("有连接关闭,当前连接数为:{}", cnt);
    }

    /**
     * 判断是否连接的方法
     * @return
     */
    public static boolean isServerClose() {
        if (webSocketSet.size() == 0) {
            log.info("已断开");
            return true;
        }else {
            log.info("已连接");
            return false;
        }
    }

    /**
     * 收到客户端消息后调用的方法
     * @param message
     * @throws IOException
     */
    @OnMessage
    public void onMessage(String message) throws IOException {
        log.info("来自客户端的消息:{}", message);
    }

    /**
     * 发生错误时的回调函数
     * @param session
     * @param error
     */
    @OnError
    public void onError(Session session, Throwable error) {
        error.printStackTrace();
    }

    /**
     * 发送给指定的用户
     * @param message
     * @param name
     * @throws IOException
     */
    public void sendMessage(String message, String name) throws IOException {
        Session session = null;
        for (WebSocketServer item : webSocketSet) {
            if (item.username.equals(name)) {
                session = item.session;
            }
        }
        if (session == null) {
            throw new ServiceException("找不到对应的seesion!");
        }
        sendInfo(session, message);
    }

    /**
     * 发送给所有用户
     * @param message
     * @throws IOException
     */
    public void sendMessageAll(String message) throws IOException {
        for (WebSocketServer item : webSocketSet) {
            sendInfo(item.session, message);
        }
    }

    /**
     * 发送消息
     * @param session
     * @param message
     * @throws IOException
     */
    private void sendInfo(Session session, String message) throws IOException {
        session.getAsyncRemote().sendText(message);
    }

    /**
     * 实现服务器主动推送
     */
    public void sendMessage(String message) throws IOException {
        this.session.getBasicRemote().sendText(message);
    }

    /**
     * 定时发送
     */
    @Scheduled(cron = "0/2 * * * * ?")
    private void autoSendInfo() {
        log.info("客户端个数:" + webSocketSet.size());

        for (WebSocketServer item : webSocketSet) {
            try {
                item.sendMessage(item.username + "11111");
            } catch (IOException e) {
                continue;
            }
        }
    }
}

发送消息的方法

@Autowired
private WebSocketServer webSocketServer;

public void messagePush(VersionPush versionPush){
    //推送消息
    MessagePushVo vo = new MessagePushVo();
    vo.setVersion(versionPush.getVersion());
    vo.setContent(versionPush.getContent());
    vo.setCreateDate(DateUtil.format(versionPush.getCreateTime(), "yyyy-MM-dd"));
    try {
        webSocketServer.sendMessageAll(JSON.toJSONString(vo));
    } catch (IOException e) {
        e.printStackTrace();
        log.error("消息推送失败======>>", e);
    }
}

前端代码文章来源地址https://www.toymoban.com/news/detail-508961.html

var limitConnect = 0;
init();
function init() {
  var ws = new WebSocket('ws://127.0.0.1:8080/webSocket/zhouhz');
// 获取连接状态
  console.log('ws连接状态:' + ws.readyState);
//监听是否连接成功
  ws.onopen = function () {
    console.log('ws连接状态->onopen:' + ws.readyState);
    limitConnect = 0;
    //连接成功则发送一个数据
    ws.send('我们建立连接啦');
  }
// 接听服务器发回的信息并处理展示
  ws.onmessage = function (data) {
    console.log('接收到来自服务器的消息:');
    console.log(data);
    //完成通信后关闭WebSocket连接
    ws.close();
  }
// 监听连接关闭事件
  ws.onclose = function () {
    // 监听整个过程中websocket的状态
    console.log('ws连接状态->onclose:' + ws.readyState);
    reconnect();

  }
// 监听并处理error事件
  ws.onerror = function (error) {
    console.log(error);
  }
}
function reconnect() {
  limitConnect ++;
  console.log("重连第" + limitConnect + "次");
  setTimeout(function(){
    init();
  },2000);

}

到了这里,关于JAVA 使用WebSocket发送通知消息的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java后端使用websocket实现与客户端之间接收及发送消息

    客户端请求websocket接口,连接通道=》我这边业务成功客户端发消息=》客户端自动刷新。 接口:ws://localhost:8080/websocket/xx 经测试,成功 如果是线上服务器连接,则需要在nginx里配置websocket相关内容,再重启nginx,代码如下 本地连接的时候用的是ws://,因为是http链接,但是如果是

    2024年02月16日
    浏览(13)
  • Python:使用钉钉dingtalk发送通知消息

    通过钉钉的开放API接口,可以很容易的将消息发送到钉钉dingtalk,比起邮件发送更稳定,及时 文档 官网:https://www.dingtalk.com/ API Explorer调试 https://open-dev.dingtalk.com/apiExplorer 文档:https://open.dingtalk.com/document/robots/custom-robot-access 使用场景:发送消息到聊天群 前期准备:需要新建

    2024年02月11日
    浏览(15)
  • java发送公众号/服务通知模板消息到指定用户(完整流程|亲测可用)

    准备: 获取当前微信小程序appId(小程序appId)获取当前小程序的秘钥secret 新建模板消息 选用后勾选需要的字段并提交 一次订阅: 指用户订阅一次,服务号可不限时间地下发一条对应的订阅通知; 长期订阅: 指用户订阅一次,服务号可长期多次下发通知,长期订阅通知仅

    2024年02月10日
    浏览(12)
  • 消息服务应用1——java项目使用websocket

    在当前微服务项目中,由于业务模块众多,消息服务的使用场景变得异常活跃。而WebSocket由于其自身的可靠性强,实时性好,带宽占用更小的优势,在实时通讯应用场景中独占鳌头,加上HTML5标准的普及流行,在前端和后端开发中应用异常广泛。 一.关于WebSocket 1.WebSocket是什么

    2024年04月25日
    浏览(1)
  • java连接websocket服务器并发送消息

    一、用python快速启动一个websocker服务器 二、使用java连接并发送消息

    2024年02月11日
    浏览(12)
  • 微信公众号 - Java推送小程序订阅消息给用户_java 通过微信公众号发送订阅通知

    不啰嗦,我们直接开始! 本文使用体验版小程序进行调试。 1、登录微信公众平台 点开下面链接,使用微信扫码 微信公众平台 然后选择一个小程序并登录 2、在小程序后台找到Appid、AppSecret、Token、EncodingAESKey等参数 AppSecret忘记了可以自行重置 往下翻,在消息推送这儿能看到

    2024年04月26日
    浏览(12)
  • 使用WebSocket在前端发送消息

    在现代Web开发中,WebSocket提供了一种在用户的浏览器和服务器之间进行全双工通信的方法。这意味着服务器可以直接向客户端发送消息,而不需要客户端先请求数据。这种通信方式对于需要实时数据传输的应用(如在线游戏、实时通知系统等)非常有用。 WebSocket API 定义了一

    2024年04月26日
    浏览(13)
  • 前端如何使用WebSocket发送消息

    WebSocket是一种在Web应用程序中实现实时双向通信的协议。相比传统的HTTP协议,WebSocket提供了更高效、更快速的双向通信方式,可以在客户端和服务器之间实时交换数据。本文将详细介绍前端如何使用WebSocket发送消息,包括创建WebSocket对象、监听WebSocket事件、发送消息以及关闭

    2024年02月11日
    浏览(13)
  • Java 构建websocket客户端,构建wss客户端,使用wss连接,并发送数据到服务器端,接收服务器端消息

    Java 构建websocket客户端,构建wss客户端,使用wss连接,并发送数据到服务器端,接收服务器端消息 回调函数处理

    2024年02月13日
    浏览(18)
  • uni-app使用plus本地推送通知栏信息,不使用第三方个推实现消息在线统一推送、消息通知(MQTT、WebSocket、setInterval定时器)

    plus.push.createMessage() 因项目一直是运行在内网,所以不支持使用uni-push等运行在公网的第三方个推渠道。 那就只能使用 plus.push.createMessage() ,示例代码如下: 参数解释: content : ( String 类型) 必选,消息显示的内容,在系统通知中心中显示的文本内容。 payload : ( String 类型 ) 可

    2024年02月15日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包