You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[Android & Node.js Server] Problem using PerMessageDeflateExtension with custom ping/pong messages ? #1164
Hi, I have a question about using PerMessageDeflateExtension.
E/SessionManager: ◖[Session] WebSocket error #Network ⚑[SessionManager$listenToEvents$6.accept:358]
E/SessionManager: ◖ org.java_websocket.exceptions.InvalidFrameException: RSV1 bit must be set for DataFrames.
E/SessionManager: ◖ at org.java_websocket.extensions.permessage_deflate.PerMessageDeflateExtension.isFrameValid(PerMessageDeflateExtension.java:321)
E/SessionManager: ◖ at org.java_websocket.drafts.Draft_6455.translateSingleFrame(Draft_6455.java:565)
E/SessionManager: ◖ at org.java_websocket.drafts.Draft_6455.translateFrame(Draft_6455.java:739)
E/SessionManager: ◖ at org.java_websocket.WebSocketImpl.decodeFrames(WebSocketImpl.java:398)
E/SessionManager: ◖ at org.java_websocket.WebSocketImpl.decode(WebSocketImpl.java:233)
E/SessionManager: ◖ at org.java_websocket.client.WebSocketClient.run(WebSocketClient.java:516)
E/SessionManager: ◖ at java.lang.Thread.run(Thread.java:923)
E/SessionManager: ◖
I ran into above error log, so I made a break point like below.
If you see the log, the payload contains our custom ping message which is being transferred in TextFrame. I would like to know if this kind of custom ping/pong message could interfere with using PerMessageDeflateExtensions properly. (I checked the RFC 6455 document and read that Ping/Pong Frames have different opcodes)
Also, I couldn't understand the purpose of the below lines.
publicvoidisFrameValid(FramedatainputFrame) throwsInvalidDataException {
if((inputFrameinstanceofTextFrame || inputFrameinstanceofBinaryFrame) && !inputFrame.isRSV1())
thrownewInvalidFrameException("RSV1 bit must be set for DataFrames.");
Does this mean that all TextFrame & BinaryFrame data should have isRSV1() set to true ? If so, how does it handle situations when server compresses data selectively?
Hey
Could you provide an example application for both java and node js?
I may have to recheck the specification but I thought it is only compressed or uncompressed. Mixing not allowed.
Best regards,
Marcel
EDIT: I have to be corrected. This document allocates the RSV1 bit of the WebSocket header for PMCEs and calls the bit the "Per-Message Compressed" bit. On a WebSocket connection where a PMCE is in use, this bit indicates whether a message is compressed or not.
Node.js Server added below code for supporting permessage-deflate. transformer: 'websockets' indicates that the server will use ws module for websocket. https://github.com/primus/primus#websockets
Activity
marci4 commentedon Jul 21, 2021
Hey
Could you provide an example application for both java and node js?
I may have to recheck the specification but I thought it is only compressed or uncompressed. Mixing not allowed.
Best regards,
Marcel
EDIT: I have to be corrected.
This document allocates the RSV1 bit of the WebSocket header for PMCEs and calls the bit the "Per-Message Compressed" bit. On a WebSocket connection where a PMCE is in use, this bit indicates whether a message is compressed or not.SaraHan774 commentedon Jul 21, 2021
Node.js Server added below code for supporting permessage-deflate.
transformer: 'websockets'indicates that the server will usewsmodule for websocket. https://github.com/primus/primus#websocketscompression : trueenables permessage deflate.In android, there is a WebSocketClient like below,
And when calling WebSocketManager.connect(), the client object is initialized like this
For the android part, I basically followed this library's wiki on PerMessageDeflateExtension.
PermessageDeflate should handle uncompressed messages
SaraHan774 commentedon Oct 21, 2021
@marci4 Hi, is 1.5.3 scheduled for release in the near future?
PhilipRoman commentedon Oct 21, 2021
FYI: you don't have to wait for new releases, you can always use https://oss.sonatype.org/content/repositories/snapshots/org/java-websocket/Java-WebSocket/1.5.3-SNAPSHOT/ or Jitpack (https://jitpack.io/#TooTallNate/Java-WebSocket/master-SNAPSHOT)
SaraHan774 commentedon Oct 21, 2021
Thank you for the answer!
Best Regards, Sara.