我正在阅读Andrew Lombardi的书“WebSocket”, 它说那个
您可以通过exe手动触发调用onclose事件 在WebSocket对象上剪切close()方法,
第15页
但是当我调用close()方法时,它没有触发onclose事件......
Chrome上的 :
当呼叫(6-7 seconds maybe)
时,服务器停止发送帧,几秒钟后onclose
,我的close()
处理程序被调用。
:
当调用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
时,服务器停止发送帧,但onclose处理程序从不调用。
那么,websocket close事件的真相是什么?
我在React中的演示应用代码
^XA
^MMT
^LS0
^BY96,95^FT52,107^BXN,6,200,0,0,1,~
^FH\^FD[mybarcode]^FS
^FT165,78^A0N,45,45^FH\^FD[mybarcode]^FS
^FT34,138^A0B,31,31^FH\^FD01-2018^FS
^FT48,145^A0N,31,31^FH\^FDMyCustomerLabel^FS
^RFW,H,1,18,1^FD400012345678901234567890123456789012^FS^RZ41265237,E,P^FS
^RZ41265237,A,P^FS
^WVY
^PQ1,0,1,Y^XZ
答案 0 :(得分:0)
close()方法尝试对websocket执行正常关闭。在实际关闭套接字之前,它会等待closeTimeout
秒(默认值为30秒),在此期间,其他对等方可以关闭帧。在此期间之后,套接字关闭,并发出事件。您可以在this great stack overflow answer中了解更多信息。