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