diff --git a/node_modules/websocket/lib/WebSocketConnection.js b/node_modules/websocket/lib/WebSocketConnection.js
index 9f2750c..f5a1997 100644
--- a/node_modules/websocket/lib/WebSocketConnection.js
+++ b/node_modules/websocket/lib/WebSocketConnection.js
@@ -271,7 +271,7 @@ WebSocketConnection.prototype.handleSocketData = function(data) {
     this.processReceivedData();
 };
 
-WebSocketConnection.prototype.processReceivedData = function() {
+WebSocketConnection.prototype.processReceivedData = function(isSync = false) {
     this._debug('processReceivedData');
     // If we're not connected, we should ignore any data remaining on the buffer.
     if (!this.connected) { return; }
@@ -320,7 +320,11 @@ WebSocketConnection.prototype.processReceivedData = function() {
         process.nextTick(function() { self.emit('frame', frame); });
     }
 
-    process.nextTick(function() { self.processFrame(frame); });
+    if (isSync) {
+        self.processFrame(frame);
+    } else {
+        process.nextTick(function() { self.processFrame(frame); });
+    }
     
     this.currentFrame = new WebSocketFrame(this.maskBytes, this.frameHeader, this.config);
 
@@ -329,7 +333,11 @@ WebSocketConnection.prototype.processReceivedData = function() {
     // processed.  We use setImmediate here instead of process.nextTick to
     // explicitly indicate that we wish for other I/O to be handled first.
     if (this.bufferList.length > 0) {
-        setImmediateImpl(this.receivedDataHandler);
+        if (isSync) {
+            this.receivedDataHandler();
+        } else {
+            setImmediateImpl(this.receivedDataHandler);
+        }
     }
 };
 
@@ -353,6 +361,11 @@ WebSocketConnection.prototype.handleSocketError = function(error) {
 };
 
 WebSocketConnection.prototype.handleSocketEnd = function() {
+    // We might have socket data scheduled for a next tick, process it now.
+    if (this.bufferList.length > 0) {
+        this.receivedDataHandler(true);
+    }
+
     this._debug('handleSocketEnd: received socket end.  state = %s', this.state);
     this.receivedEnd = true;
     if (this.state === STATE_CLOSED) {

Patch websocket to fix data after end issues
Patch websocket to fix data after end issues

