Javascript 如何通过spring websocket向特定设备发送消息
我对Spring websocket相当陌生。我有一个简单的演示如下: 握手接受器类:Javascript 如何通过spring websocket向特定设备发送消息,javascript,spring,websocket,spring-websocket,Javascript,Spring,Websocket,Spring Websocket,我对Spring websocket相当陌生。我有一个简单的演示如下: 握手接受器类: public class HandshakeInterceptor extends HttpSessionHandshakeInterceptor { private static final Log logger = LogFactory .getLog(HandshakeInterceptor.class); @Override public boolean beforeHandsha
public class HandshakeInterceptor extends HttpSessionHandshakeInterceptor {
private static final Log logger = LogFactory
.getLog(HandshakeInterceptor.class);
@Override
public boolean beforeHandshake(ServerHttpRequest request,
ServerHttpResponse response, WebSocketHandler wsHandler,
Map<String, Object> attributes) throws Exception {
logger.info("Before Handshake");
return super.beforeHandshake(request, response, wsHandler, attributes);
}
@Override
public void afterHandshake(ServerHttpRequest request,
ServerHttpResponse response, WebSocketHandler wsHandler,
Exception ex) {
logger.info("After Handshake");
super.afterHandshake(request, response, wsHandler, ex);
}
}
弹簧映射websocket:
<bean id="websocket"
class="com.n9.api.websocket.handler.WebsocketEndPoint" />
<websocket:handlers>
<websocket:mapping path="/websocket" handler="websocket" />
<websocket:handshake-interceptors>
<bean
class="com.n9.api.websocket.HandshakeInterceptor" />
</websocket:handshake-interceptors>
</websocket:handlers>
现在我想向特定用户发送一条消息。我定义每个设备都有一个deviceId,所以我想知道:
感谢您的关注。您可以使用会话来保存设备ID
session.setAttribute("deviceId",deviceId);
在HandshakeInterceptor.java中
if (request instanceof ServletServerHttpRequest) {
ServletServerHttpRequest servletRequest = (ServletServerHttpRequest) request;
HttpSession session = servletRequest.getServletRequest().getSession(false);
if (session != null) {
String deviceId= (String) session.getAttribute("deviceId");
attributes.put("websockt_deviceId",deviceId);
}
}
在WebsocketEndPoint.java中,您需要一个类似
private static final ArrayList<WebSocketSession> sessions;
public void sendMessageToUser(String deviceId, TextMessage message) {
for (WebSocketSession session: sessions) {
if (session.getAttributes().get("websockt_deviceId").equals(deviceId)) {
try {
if (session.isOpen()) {
session.sendMessage(message);
}
} catch (IOException e) {
e.printStackTrace();
}
break;
}
}
}
私有静态最终ArrayList会话;
public void sendMessageToUser(字符串设备ID,文本消息){
用于(WebSocketSession会话:会话){
if(session.getAttributes().get(“websockt_deviceId”).equals(deviceId)){
试一试{
if(session.isOpen()){
会话。发送消息(消息);
}
}捕获(IOE异常){
e、 printStackTrace();
}
打破
}
}
}
您可以从服务器向特定用户发送消息您可以使用会话来保存设备ID
session.setAttribute("deviceId",deviceId);
在HandshakeInterceptor.java中
if (request instanceof ServletServerHttpRequest) {
ServletServerHttpRequest servletRequest = (ServletServerHttpRequest) request;
HttpSession session = servletRequest.getServletRequest().getSession(false);
if (session != null) {
String deviceId= (String) session.getAttribute("deviceId");
attributes.put("websockt_deviceId",deviceId);
}
}
在WebsocketEndPoint.java中,您需要一个类似
private static final ArrayList<WebSocketSession> sessions;
public void sendMessageToUser(String deviceId, TextMessage message) {
for (WebSocketSession session: sessions) {
if (session.getAttributes().get("websockt_deviceId").equals(deviceId)) {
try {
if (session.isOpen()) {
session.sendMessage(message);
}
} catch (IOException e) {
e.printStackTrace();
}
break;
}
}
}
私有静态最终ArrayList会话;
public void sendMessageToUser(字符串设备ID,文本消息){
用于(WebSocketSession会话:会话){
if(session.getAttributes().get(“websockt_deviceId”).equals(deviceId)){
试一试{
if(session.isOpen()){
会话。发送消息(消息);
}
}捕获(IOE异常){
e、 printStackTrace();
}
打破
}
}
}
您可以从服务器向特定用户发送消息