undici icon indicating copy to clipboard operation
undici copied to clipboard

permessage-deflate support in websocket

Open KhafraDev opened this issue 1 year ago • 1 comments

This would solve...

The implementation should look like...

I have also considered...

Additional context

KhafraDev avatar May 14 '24 01:05 KhafraDev

class Queue {
  queue = []
  compress = false

  run () {
    while (this.queue.length) {
      const item = this.queue[0]

      if (!item.done) return

      this.queue.shift()
    }
  }

  add (item) {
    if (Buffer.isBuffer(item)) {
      this.queue.push({ done: true, value: item })
    } else if (item instanceof Blob) {
      const promise = item.arrayBuffer()
      const queued = { done: false, value: promise }

      promise.then((value) => {
        queued.done = true
        queued.value = Buffer.from(value)
        this.run()
      })

      this.queue.push(queued)
    }
  }
}

a very simple queue that dispatches buffers/blobs in the order they were received. Not sure if it's worth sacrificing performance over sending blobs, though.

KhafraDev avatar May 14 '24 01:05 KhafraDev