Skip to content

Commit 25d4c09

Browse files
author
jin
committed
$mol_rest_server: fixed forever sleep after heartbeat
1 parent 085b329 commit 25d4c09

File tree

1 file changed

+42
-42
lines changed

1 file changed

+42
-42
lines changed

rest/server/server.node.ts

+42-42
Original file line numberDiff line numberDiff line change
@@ -176,48 +176,48 @@ namespace $ {
176176

177177
sock.pause()
178178

179-
this._ws_icome_partial.push( chunk )
180-
const patial_size = this._ws_icome_partial.reduce( ( sum, buf )=> sum + buf.byteLength, 0 )
181-
182-
let frame = $mol_websocket_frame.from( this._ws_icome_partial[0] )
183-
const msg_size = frame.size() + frame.data().size
184-
185-
if( msg_size > patial_size ) {
186-
setTimeout( ()=> sock.resume() )
187-
return
188-
}
189-
190-
chunk = Buffer.alloc( patial_size )
191-
let offset = 0
192-
for( const buf of this._ws_icome_partial.splice( 0 ) ) {
193-
chunk.set( buf, offset )
194-
offset += buf.byteLength
195-
}
196-
frame = $mol_websocket_frame.from( chunk )
197-
198-
if( msg_size < chunk.byteLength ) {
199-
const tail = new Uint8Array( chunk.buffer, chunk.byteOffset + msg_size )
200-
this._ws_icome_partial.push( tail )
201-
}
202-
203-
let data: string | Uint8Array = new Uint8Array( chunk.buffer, chunk.byteOffset + frame.size(), frame.data().size )
204-
205-
if( frame.data().mask ) {
206-
const mask = frame.mask()
207-
for( let i = 0; i < data.length; ++i ) {
208-
data[ i ] ^= mask[ i % 4 ]
209-
}
210-
}
211-
212-
const op = frame.kind().op
213-
if( op === 'txt' ) data = $mol_charset_decode( data )
214-
215-
const message = upgrade.derive( 'POST', data )
216-
217-
if( op !== 'txt' && op !== 'bin' ) return
218-
219179
try {
220180

181+
this._ws_icome_partial.push( chunk )
182+
const patial_size = this._ws_icome_partial.reduce( ( sum, buf )=> sum + buf.byteLength, 0 )
183+
184+
let frame = $mol_websocket_frame.from( this._ws_icome_partial[0] )
185+
const msg_size = frame.size() + frame.data().size
186+
187+
if( msg_size > patial_size ) {
188+
setTimeout( ()=> sock.resume() )
189+
return
190+
}
191+
192+
chunk = Buffer.alloc( patial_size )
193+
let offset = 0
194+
for( const buf of this._ws_icome_partial.splice( 0 ) ) {
195+
chunk.set( buf, offset )
196+
offset += buf.byteLength
197+
}
198+
frame = $mol_websocket_frame.from( chunk )
199+
200+
if( msg_size < chunk.byteLength ) {
201+
const tail = new Uint8Array( chunk.buffer, chunk.byteOffset + msg_size )
202+
this._ws_icome_partial.push( tail )
203+
}
204+
205+
let data: string | Uint8Array = new Uint8Array( chunk.buffer, chunk.byteOffset + frame.size(), frame.data().size )
206+
207+
if( frame.data().mask ) {
208+
const mask = frame.mask()
209+
for( let i = 0; i < data.length; ++i ) {
210+
data[ i ] ^= mask[ i % 4 ]
211+
}
212+
}
213+
214+
const op = frame.kind().op
215+
if( op === 'txt' ) data = $mol_charset_decode( data )
216+
217+
const message = upgrade.derive( 'POST', data )
218+
219+
if( op !== 'txt' && op !== 'bin' ) return
220+
221221
if( data.length !== 0 ) {
222222
this.$.$mol_log3_rise({
223223
place: this,
@@ -228,7 +228,7 @@ namespace $ {
228228
await $mol_wire_async( this.root() ).REQUEST( message )
229229
}
230230

231-
sock.resume()
231+
setTimeout( ()=> sock.resume() )
232232

233233
} catch( error: any ) {
234234

@@ -240,7 +240,7 @@ namespace $ {
240240
stack: error.stack,
241241
})
242242

243-
sock.resume()
243+
setTimeout( ()=> sock.resume() )
244244

245245
}
246246

0 commit comments

Comments
 (0)