Lit*_*lee 5 javascript websocket
我正在阅读 Andrew Lombardi 的书“WebSocket”,它说
exe可以手动触发调用onclose事件吗?剪切 WebSocket 对象上的 close() 方法,
第 15 页
但是当我调用 close() 方法时,它没有触发 onclose 事件...
在 Chrome 上:
调用时close(),服务器停止发送帧,几秒钟后(6-7 seconds maybe),我的onclose处理程序被调用。
在 iOS 11 上:
当 call 时close(),服务器停止发送帧,但从未调用 onclose 处理程序。
那么,websocket 关闭事件的真相是什么?
我在 React 中的演示应用程序代码
import React, { Component } from 'react'
class App extends Component {
constructor(props) {
super(props)
this.state = {
log: [],
}
this.ws = null
}
render() {
return (
<div>
<button type="button" onClick={this._open}>
open
</button>
<button type="button" onClick={this._close}>
close
</button>
<div
style={{
padding: 10,
backgroundColor: '#ddd'
}}
>
{this.state.log.map((item, index) => {
return <div key={index}>{item}</div>
})}
</div>
</div>
)
}
_open = () => {
this.ws = new WebSocket('wss://cmb.100jc.net/answer/ws')
this.ws.onopen = () => {
alert('open')
this.setState(prevState => {
return {
log: prevState.log.concat('open')
}
})
}
this.ws.onclose = () => {
alert('close')
this.setState(prevState => {
return {
log: prevState.log.concat('close')
}
})
}
this.ws.onerror = () => {
this.setState(prevState => {
return {
log: prevState.log.concat('error')
}
})
}
}
_close = () => {
this.ws.close()
}
}
export default App
Run Code Online (Sandbox Code Playgroud)
close() 方法尝试执行 websocket 的正常关闭。它closeTimeout在实际关闭套接字之前等待几秒钟(默认为 30 秒),在此期间其他对等方可以发送关闭帧。在此期间之后,套接字将关闭并发出事件。您可以在这个很棒的堆栈溢出答案中阅读更多相关内容。
| 归档时间: |
|
| 查看次数: |
812 次 |
| 最近记录: |