Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何通过spring websocket向特定设备发送消息_Javascript_Spring_Websocket_Spring Websocket - Fatal编程技术网

Javascript 如何通过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

我对Spring websocket相当陌生。我有一个简单的演示如下:

握手接受器类:

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,所以我想知道:

  • 如何与客户端发送的属性握手
  • 如何从客户端javascript发送握手属性
  • 如何通过握手属性将消息从服务器发送到客户端

  • 感谢您的关注。

    您可以使用会话来保存设备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();
    }
    打破
    }
    }
    }
    
    您可以从服务器向特定用户发送消息