import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.socket.server.standard.ServerEndpointExporter; //注入ServerEndpointExporter @Configuration public class WebSocketConfig { @Bean public ServerEndpointExporter serverEndpointExporter() { return new ServerEndpointExporter(); } }
* @ Author :weisheng. * @ Date :Created in AM 10:43 2018/6/8 0008 * @ Description:websocket服务 * @ Modified By: * @Version: $version$ */ import com.google.gson.Gson; import com.nork.common.model.LoginUser; import com.sandu.common.LoginContext; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import javax.websocket.*; import javax.websocket.server.ServerEndpoint; import java.io.IOException; import java.util.HashMap; import java.util.Map; /** * @author weisheng * @Title: * @Package * @Description: * @date 2018/6/8 0008AM 10:43 */ @Slf4j @ServerEndpoint(value = "/websocket") @Component public class WebSocketServer { private static Gson gson = new Gson(); private Session session; private static Map<Integer, Session> sessionPool = new HashMap<>(); private static Map<String, Integer> sessionIds = new HashMap<>(); //连接客户端创建session @OnOpen public void open(Session session) { log.info("连接websocket客户端创建session开始"); LoginUser loginUser = LoginContext.getLoginUser(LoginUser.class); if (loginUser == null) { onClose(); } this.session = session; sessionPool.put(loginUser.getId(), session); sessionIds.put(session.getId(), loginUser.getId()); log.info("连接websocket客户端创建session完成"); } //接受客户端消息 @OnMessage public void onMessage(String message) { } //关闭与客户端连接 @OnClose public void onClose() { sessionPool.remove(sessionIds.get(session.getId())); sessionIds.remove(session.getId()); log.info("socket关闭连接"); } //发生错误时触发 @OnError public void onError(Session session, Throwable error) { log.info("socket连接异常,关闭连接",error); error.printStackTrace(); } //向客户端发送消息 public static void sendMessage(Object obj, Integer userId) { String message = gson.toJson(obj); Session s = sessionPool.get(userId); if (s != null) { try { s.getBasicRemote().sendText(message); } catch (IOException e) { e.printStackTrace(); } } } //获取客户端连接数 public static int getOnlineNum(){ return sessionPool.size(); } //获取所有客户端信息 public static String getOnlineUsers(){ StringBuffer users = new StringBuffer(); for(String key : sessionIds.keySet()){ users.append(sessionIds.get(key)+","); } return users.toString(); } //向所有连接的客户端发送消息 public static void sendAll(String msg){ for(String key : sessionIds.keySet()){ sendMessage(msg,sessionIds.get(key)); } } }