-
Notifications
You must be signed in to change notification settings - Fork 1
Home
包子 edited this page Sep 17, 2019
·
16 revisions
推送中心的目标是为了满足全公司的后端推送业务的,从功能上需要满足多个项目同时接入,同时项目与项目之间数据要完全隔离,不能电商项目
的广播消息被理财项目
给接收到了。为了说明推送中心的功能需要,请看下图。
- 推送中心要支持支持广播,组播,单播接口。例如电商项目可以支持给所有客户端发送消息(
广播
),也可以指定给所有地点为上海的客户端发送消息(多播
),也可以指定给用户1发送消息(单播
)。 - 推送中心要有鉴权功能,客户端连接推送中心时推送中心要能校验客户端是否合法。
- 推送中心要灵活管理连接,实时查看客户端连接情况,主动断开与某个客户端的连接等功能。
- 推送中心要有黑白名单功能,能防御恶意连接,能防御DDOS攻击。
- 推送中心要高可用,支持高并发连接。
客户端-推送中心-服务端调用关系如下
客户端传入projectId
,token
获得SocketOpts对象,通过该对象你可以灵活订阅主题,监听event。
SocketOpts opts = new SocketOpts("http://mock.dfocus.com", "your projectId", "your token");
SocketIOFactory factory = new SocketIOFactory(opts);
SocketIoClientBiz biz = new SocketIoClientBiz(factory);
biz.connect(new Finish() {
@Override
public void onFinished(String msg) {
if ("".equals(msg)) {
System.out.println("Connection established");
} else {
System.out.println("Failed to connect to server: " + msg);
}
}
});
biz.subscribe("your topic", "your event", new EventCallback() {
@Override
public void onFire(final EventMessage message) {
@Override
public void run() {
System.out.println("Message from server: " + message.getPayload());
}
}
});
biz.onStateChange(new StateChangeCallback() {
@Override
public void onChange(final ClientState s) {
System.out.println("State Changed: " + s);
}
});
服务端构造如下对象,传入MQ,或者调用推送中心接口(单体下)即可完成消息推送。
public class WsMessage {
/**
* 项目ID
*/
@ApiModelProperty(value = "项目ID", example = "/fm")
private String projectId;
/**
* 订阅主题
*/
@ApiModelProperty(value = "订阅主题", example = "group_1")
private String topic;
/**
* 订阅事件
*/
@ApiModelProperty(value = "订阅事件", example = "event_1")
private String event;
/**
* 内容 <br>
* 和客户端约定好的json数据
*/
@ApiModelProperty(value = "内容", example = "{\"content\":\"解析我,做你想做的事情\"}")
private String payload;
}