后台配置文件
package com.keyten.commons.config;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.CopyOnWriteArraySet;import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Component;
@ServerEndpoint(value = "/websocket/{fuserid}")
@Component
public class MyWebSocket {private static CopyOnWriteArraySet<MyWebSocket> webSocketSet = new CopyOnWriteArraySet<MyWebSocket>();
private Session session;
private Integer fuserid;
@OnOpen
public void onOpen(Session session, @PathParam(value = "fuserid") Integer fuserid) {
this.session = session;
this.fuserid = fuserid;
MyWebSocket _this = getcurrentWenSocket(this.fuserid);
webSocketSet.add(this);
}@OnClose
public void onClose() {
boolean b = webSocketSet.remove(this);
}@OnMessage
public void onMessage(String message, Session session) {
try {
MyWebSocket _this = null;
for (MyWebSocket item : webSocketSet) {
if(item.session.getId() == session.getId()){
_this = item;
}
}
if(_this == null){
this.sendMessage("未连接不能发送消息!");
return;
}
this.sendMessage("来自服务端的消息: <已读> " + message);
} catch (IOException e) {
}
}public static MyWebSocket getcurrentWenSocket(Integer fuserid){
if(fuserid == null || fuserid < 1 || webSocketSet == null || webSocketSet.size() < 1){
return null;
}
Iterator<MyWebSocket> iterator = webSocketSet.iterator();
while (iterator.hasNext()) {
MyWebSocket _this = iterator.next();
if(_this.fuserid == fuserid){
return _this;
}
}
return null;
}public void sendMessage(String message) throws IOException {
this.session.getBasicRemote().sendText(message);
}public static void sendMessage(Integer fuserid,String message){
try {
if(fuserid == null || fuserid < 1 || StringUtils.isBlank(message)){
return;
}
MyWebSocket _this = getcurrentWenSocket(fuserid);
if(_this == null){
return;
}
_this.sendMessage(message);
} catch (IOException e) {
System.out.println("发送消息异常!");
}
}public static void sendMessageList(List<Integer> fuseridList, String message){
try{
if(fuseridList == null || fuseridList.size() < 1 || StringUtils.isBlank(message)){
return;
}
for (Integer fuserid : fuseridList) {
MyWebSocket _this = getcurrentWenSocket(fuserid);
if(_this == null){
continue;
}
_this.sendMessage(message);
}
}catch(Exception e){
}
}public static void sendMessageAll(String message) {
try {
if(webSocketSet == null || webSocketSet.size() < 1 || StringUtils.isBlank(message)){
return;
}
for (MyWebSocket item : webSocketSet) {
item.sendMessage(message);
}
} catch (IOException e) {
}
}}
内置TomCat(如果用外置可忽略)
/**
* @Author 老王
* @Description:
* @Date 2019年2月18日 上午8:56:38
*/
package com.keyten.commons.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;/**
* @Author 老王
* @Description:
* @Date 2019年2月18日 上午8:56:38
*/@Configuration
public class WebSocketConfig {
@Bean
public ServerEndpointExporter serverEndpointExporter() {
return new ServerEndpointExporter();
}
}
js部分
var websocket = null;
if ('WebSocket' in window) {
websocket = new WebSocket("ws://127.0.0.1:8080/websocket/1");
} else {
alert('Not support websocket')
}
websocket.onmessage = function(event) {
setMessageInnerHTML(event.data);
}window.onbeforeunload = function() {
websocket.close();
}function setMessageInnerHTML(datas) {
var innerHTML = $.parseJSON(datas);
var title = innerHTML.title;
$("#s1").html(title.substring(0,45));
var creator = innerHTML.creator;
$("#s6").html('作者:'+creator);
var addtime = innerHTML.addtime;
$("#s7").html('时间:'+addtime);
show();
var timesRun = 0;
var interval = setInterval(function(){
timesRun += 1;
if(timesRun == 5){
clearInterval(interval);
}
show();
}, 25000);}
function closeWebSocket() {
websocket.close();
}
后台接口正常访问即可