1 | package websocket
|
---|
2 |
|
---|
3 | // CompressionMode represents the modes available to the deflate extension.
|
---|
4 | // See https://tools.ietf.org/html/rfc7692
|
---|
5 | //
|
---|
6 | // A compatibility layer is implemented for the older deflate-frame extension used
|
---|
7 | // by safari. See https://tools.ietf.org/html/draft-tyoshino-hybi-websocket-perframe-deflate-06
|
---|
8 | // It will work the same in every way except that we cannot signal to the peer we
|
---|
9 | // want to use no context takeover on our side, we can only signal that they should.
|
---|
10 | // It is however currently disabled due to Safari bugs. See https://github.com/nhooyr/websocket/issues/218
|
---|
11 | type CompressionMode int
|
---|
12 |
|
---|
13 | const (
|
---|
14 | // CompressionNoContextTakeover grabs a new flate.Reader and flate.Writer as needed
|
---|
15 | // for every message. This applies to both server and client side.
|
---|
16 | //
|
---|
17 | // This means less efficient compression as the sliding window from previous messages
|
---|
18 | // will not be used but the memory overhead will be lower if the connections
|
---|
19 | // are long lived and seldom used.
|
---|
20 | //
|
---|
21 | // The message will only be compressed if greater than 512 bytes.
|
---|
22 | CompressionNoContextTakeover CompressionMode = iota
|
---|
23 |
|
---|
24 | // CompressionContextTakeover uses a flate.Reader and flate.Writer per connection.
|
---|
25 | // This enables reusing the sliding window from previous messages.
|
---|
26 | // As most WebSocket protocols are repetitive, this can be very efficient.
|
---|
27 | // It carries an overhead of 8 kB for every connection compared to CompressionNoContextTakeover.
|
---|
28 | //
|
---|
29 | // If the peer negotiates NoContextTakeover on the client or server side, it will be
|
---|
30 | // used instead as this is required by the RFC.
|
---|
31 | CompressionContextTakeover
|
---|
32 |
|
---|
33 | // CompressionDisabled disables the deflate extension.
|
---|
34 | //
|
---|
35 | // Use this if you are using a predominantly binary protocol with very
|
---|
36 | // little duplication in between messages or CPU and memory are more
|
---|
37 | // important than bandwidth.
|
---|
38 | CompressionDisabled
|
---|
39 | )
|
---|