java 主动推送 异步_(转)异步实现服务器推送消息(聊天功能示例)

本文介绍了一个使用Java实现的异步服务器推送消息的聊天功能示例,包括主要技术点、项目结构及关键代码。通过模拟Logan向Charles发送消息,展示消息的发送、存储和接收过程,解决超时问题。项目包含Spring Boot和OAuth2等组件,适用于理解异步推送原理和实践。
摘要由CSDN通过智能技术生成

https://www.cnblogs.com/jonban/p/10391339.html

优点:异步推送消息只要客户端发送异步请求就可以,不依赖客户端版本,不存在浏览器兼容问题。

一、 主要讲解技术点,异步实现服务器推送消息

二、 项目示例,聊天会话功能,主要逻辑如下:

由Logan向 Charles 发送消息,如果Charles在线,则直接发送,否则存储为离线消息。

Charles 登录后向服务端发请求获取消息,首先查询离线消息,如果有消息直接返回。没有消息则等待。

由于长时间没有消息推送,等待会超时,所以设置超时异常通知,超时则返回空内容到客户端,由客户端再次发送获取消息请求,解决超时问题。

建议先复制项目到本地工程,边测试边理解。

项目示例如下:

1.   新建Maven项目 async-push

2.   pom.xml

48304ba5e6f9fe08f3fa1abda7d326ab.png

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0

http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

com.java

async-push

1.0.0

org.springframework.boot

spring-boot-starter-parent

2.0.5.RELEASE

org.springframework.boot

spring-boot-starter-web

org.springframework.cloud

spring-cloud-starter-oauth2

2.0.0.RELEASE

org.springframework

springloaded

1.2.8.RELEASE

provided

org.springframework.boot

spring-boot-devtools

provided

${project.artifactId}

org.apache.maven.plugins

maven-compiler-plugin

1.8

1.8

UTF-8

org.springframework.boot

spring-boot-maven-plugin

repackage

48304ba5e6f9fe08f3fa1abda7d326ab.png

3.   AsyncPushStarter.java

48304ba5e6f9fe08f3fa1abda7d326ab.png

package com.java;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

/**

* 主启动类

*

* @author Logan

* @createDate 2019-02-17

* @version 1.0.0

*

*/

@SpringBootApplication

public class AsyncPushStarter {

public static void main(String[] args) {

SpringApplication.run(AsyncPushStarter.class, args);

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

4.   SendMessageVo.java

48304ba5e6f9fe08f3fa1abda7d326ab.png

package com.java.vo;

/**

* 发送消息封装体

*

* @author Logan

* @createDate 2019-02-17

* @version 1.0.0

*

*/

public class SendMessageVo {

/**

* 发送目标ID

*/

private String targetId;

/**

* 发送消息内容

*/

private String content;

public String getTargetId() {

return targetId;

}

public void setTargetId(String targetId) {

this.targetId = targetId;

}

public String getContent() {

return content;

}

public void setContent(String content) {

this.content = content;

}

@Override

public String toString() {

return "SendMessageVo [targetId=" + targetId + ", content=" + content + "]";

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

5.   PushMessageVo.java

48304ba5e6f9fe08f3fa1abda7d326ab.png

package com.java.vo;

import java.util.Date;

import com.fasterxml.jackson.annotation.JsonFormat;

/**

* 推送消息封装体

*

* @author Logan

* @createDate 2019-02-17

* @version 1.0.0

*

*/

public class PushMessageVo {

/**

* 发送人ID,即消息来源

*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值