faye/faye-websocket-node

`onopen` event can't be used post-0.5.0

Closed this issue · 3 comments

sockjs-node sets up its Faye like this:

      ws = new Websocket(req, connection, head);
      ws.onopen = function() {
        return new RawWebsocketSessionReceiver(req, connection, _this, ws);
      };

ie, it doesn't actually do any processing until the onopen event is received. When trying to upgrade from 0.4.4 to 0.6.0, this seems to completely break. Specifically, it seems quite possible for the open event to be delivered synchronously with the constructor call. Inserting a console.trace into _open makes this pretty clear:

    at instance._open (/Users/glasser/Projects/Meteor/sockjs-node/node_modules/faye-websocket/lib/faye/websocket/api.js:93:12)
    at API._driver.on.Event.message (/Users/glasser/Projects/Meteor/sockjs-node/node_modules/faye-websocket/lib/faye/websocket/api.js:26:49)
    at EventEmitter.emit (events.js:96:17)
    at instance._open (/Users/glasser/Projects/Meteor/sockjs-node/node_modules/faye-websocket/node_modules/websocket-driver/lib/websocket/driver/base.js:89:10)
    at instance.start (/Users/glasser/Projects/Meteor/sockjs-node/node_modules/faye-websocket/node_modules/websocket-driver/lib/websocket/driver/base.js:62:34)
    at new WebSocket (/Users/glasser/Projects/Meteor/sockjs-node/node_modules/faye-websocket/lib/faye/websocket.js:31:16)
    at App.exports.app.raw_websocket (/Users/glasser/Projects/Meteor/sockjs-node/lib/trans-websocket.js:50:12)
    at execute_request (/Users/glasser/Projects/Meteor/sockjs-node/lib/webjs.js:21:38)
    at IncomingMessage.exports.generateHandler.req.next_filter (/Users/glasser/Projects/Meteor/sockjs-node/lib/webjs.js:95:18)
    at Listener.exports.generateHandler [as webjs_handler] (/Users/glasser/Projects/Meteor/sockjs-node/lib/webjs.js:97:13)

How are you supposed to listen to the open event in the new version of the library?

It'd be nice to know the answer 'cause @nawis4 and I are seeing memory leaks with sockjs-node with faye-websocket 0.4.4 and would like to try out 0.6.
Will probably try to figure it out for myself in the meanwhile but since Faye author should know the answer anyway...

Note to @decadent issue: leaks appear only while messaging through sockjs-websocket connection (not rfc)

Sorry for the delay on this. Just pushed a fix for this problem by making the WebSocket object start the driver asynchronously, allowing onopen hooks to be registered before the protocol starts. Expect a new package release in the next few days.