与websocket比较有缘,经历过小程序+java和Angular+java之后整理出次最终教程
1.Angular
使用angular2-websocket插件,首先请下载插件npm install angular2-websocket --save
在你需要连接websocket的ts里面,在对应的地方加入下面代码
导入插件import {$WebSocket} from 'angular2-websocket/angular2-websocket'
创建连接ws = new $WebSocket("ws://127.0.0.1:8080/ws/test");
发送消息到服务器this.ws.send("data")).subscribe(
(msg)=> {
console.log("next", msg.data);
},
(msg)=> {
console.log("error", msg);
},
()=> {
console.log("complete");
}
);
接受消息this.ws.onMessage(
(msg: MessageEvent)=> {
console.log(msg.data);
},
{autoApply: false}
);
Java后台
WebSocketInterceptor.java
package iguard.websocket.config; |
WebSocketPushHandler.javapackage iguard.websocket.config;
import java.util.List;
import iguard.core.util.JSONHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.socket.*;
public class WebSocketPushHandler<R,P> implements WebSocketHandler{
private static final Logger LOGGER = LoggerFactory.getLogger(WebSocketPushHandler.class);
private WebSocketDataHandler<R,P> dataHandler;
public WebSocketPushHandler(WebSocketDataHandler<R,P> pdataHandler,Class<P> pp){
this.dataHandler = pdataHandler;
this.setP(pp);
}
private Class<P> getP() {
return p;
}
private void setP(Class<P> p) {
this.p = p;
}
private Class<P> p;
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
}
public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception {
if (message.getPayloadLength()==0){
return;
}
try {
if(session.isOpen()){
P p = JSONHelper.jsonToBean(message.getPayload().toString(), this.getP());
LOGGER.info(p.toString());
if(session.getUri().equals("/ws/test")){// 返回list数据
List<R> r = dataHandler.getSendListMsg(p);
LOGGER.info(r.toString());
session.sendMessage(new TextMessage(JSONHelper.beanToJson(r)));
}else { // 返回单个对象数据
R r = dataHandler.getSendMsg(p);
LOGGER.info(r.toString());
session.sendMessage(new TextMessage(JSONHelper.beanToJson(r)));
LOGGER.info(JSONHelper.beanToJson(r));
}
LOGGER.info("发送成功。");
}
}catch (Exception e){
LOGGER.error("{},{}",e.getMessage(),e.getStackTrace());
}
}
public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
}
public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception {
if (session.isOpen()){
session.close();
}
LOGGER.info("退出系统");
}
public boolean supportsPartialMessages() {
return false;
}
}
WebSocketDataHandler.javapackage iguard.websocket.config;
import java.util.List;
public interface WebSocketDataHandler<R,P> {
R getSendMsg(P p);
List<R> getSendListMsg(P p);
}
WebSocketConfig.javapackage iguard.websocket.config;
import iguard.websocket.monitor.MonitorDataHandler;
import iguard.websocket.monitor.MonitorList;
import iguard.websocket.sleep.SleepDataHandler;
import iguard.websocket.sleep.UserDevice;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.config.annotation.*;
public class WebSocketConfig extends WebMvcConfigurerAdapter implements WebSocketConfigurer {
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(WebSocketPushHandler("/sleep"),"/sleep").addInterceptors(new WebSocketInterceptor()).setAllowedOrigins("*");
registry.addHandler(WebSocketPushHandler("/test"),"/test").addInterceptors(new WebSocketInterceptor()).setAllowedOrigins("*");
}
public WebSocketHandler WebSocketPushHandler(String url){
switch (url){
case "/test" : return new WebSocketPushHandler<>(new MonitorDataHandler(),MonitorList.class);
case "/sleep" : return new WebSocketPushHandler<>(new SleepDataHandler(),UserDevice.class);
default: return new WebSocketPushHandler<>(new SleepDataHandler(),UserDevice.class);
}
}
}
MonitorDataHandler.javapackage iguard.websocket.monitor;
import iguard.websocket.config.WebSocketDataHandler;
import iguard.core.entity.ReturnMsg;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
public class MonitorDataHandler implements WebSocketDataHandler<ReturnMsg,MonitorList> {
private static final Logger LOGGER = LoggerFactory.getLogger(MonitorDataHandler.class);
public ReturnMsg getSendMsg(MonitorList monitorList) { //返回单个对象方法
return null;
}
public List<ReturnMsg> getSendListMsg(MonitorList monitorList) {// 返回list对象方法
return null;
}
}