Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.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 如果接受断开/连接Web套接字,则不会重新连接Web套接字_Javascript_React Native_Websocket_React Redux - Fatal编程技术网

Javascript 如果接受断开/连接Web套接字,则不会重新连接Web套接字

Javascript 如果接受断开/连接Web套接字,则不会重新连接Web套接字,javascript,react-native,websocket,react-redux,Javascript,React Native,Websocket,React Redux,在我的应用程序中,当用户登录时,我使用会话ID创建webSocket连接。注销后,套接字将关闭。这很好用。但是如果我注销并且在终止应用程序之前,如果再次使用相同帐户或不同帐户登录webSocket抛出错误收到来自服务器503的错误响应代码现在如果我在用户登录时终止应用程序,当我启动应用程序webSocket时,将完美连接,此外,如果在注销后关闭应用程序并使用初始呈现打开应用程序,则用户登录套接字将连接,不会出现任何错误。我的套接字代码如下。我们将非常感谢您在这方面提供的任何帮助 import R

在我的应用程序中,当用户登录时,我使用会话ID创建webSocket连接。注销后,套接字将关闭。这很好用。但是如果我注销并且在终止应用程序之前,如果再次使用相同帐户或不同帐户登录webSocket抛出错误
收到来自服务器503的错误响应代码
现在如果我在用户登录时终止应用程序,当我启动应用程序webSocket时,将完美连接,此外,如果在注销后关闭应用程序并使用初始呈现打开应用程序,则用户登录套接字将连接,不会出现任何错误。我的套接字代码如下。我们将非常感谢您在这方面提供的任何帮助

import React, {Component} from 'react';
import {connect} from 'react-redux';
class SocketController extends React.PureComponent {

    state = {
        socket: null
    }

    closeSocket() {
        this
            .state
            .socket
            .close();
        this.setState({socket: null})
    }
    componentDidUpdate() {
        if (this.props.user && this.props.user.sessionId) {
            this.connectSocket();
        } else {
            this.closeSocket()
        }
    }

    connectSocket() {
        let url = 'ws://localhost/socket';
        this.setState({
            socket: new WebSocket(url, '', {
                headers: {
                    Cookie: this.props.user.sessionId
                }
            })
        }, () => {

            this.state.socket.onerror = (e) => {
                console.log(e.message);
            }

            this.state.socket.onclose = () => {}
            this.state.socket.onopen = (e) => {}
            this.state.socket.onmessage = (event) => {}

        });

    }
    render() {
        return null
    }

}

const mapStateToProps = ({user}) => ({user});

export default connect(mapStateToProps)(SocketController);

wireshark
的帮助下调试了几个小时后,我知道在我的用例中,有一对cookie在注销时发送到服务器,但没有清除cookie。因此,首先清除cookie,然后重新连接服务器

在使用重新连接到服务器之前,只需清除所有cookie即可

import CookieManager from '@react-native-community/cookies';

// clear cookies
   CookieManager.clearAll()
      .then((success) => {
        console.log('CookieManager.clearAll =>', success);
    })