Javascript 套接字子类不发出事件

Javascript 套接字子类不发出事件,javascript,node.js,sockets,events,coffeescript,Javascript,Node.js,Sockets,Events,Coffeescript,短版本:TCP套接字子类未保留事件侦听器 我有一个TCP自定义套接字(CoffeeScript): 界面相当简单。我发送数据,当我收到数据时,我希望它是JSON。我将这个套接字流式传输到一个json流,它为我处理json的反序列化。效果很好 问题是:出于某种原因,我的套接字没有保留它的事件侦听器 测试用例(套接字已初始化为s,并在块之前连接到): 测试输出: WTF [] before SOMETHING ADDED task function (task) { consol

短版本:TCP套接字子类未保留事件侦听器

我有一个TCP自定义套接字(CoffeeScript):

界面相当简单。我发送数据,当我收到数据时,我希望它是JSON。我将这个套接字流式传输到一个
json流
,它为我处理json的反序列化。效果很好

问题是:出于某种原因,我的套接字没有保留它的事件侦听器

测试用例(套接字已初始化为
s
,并在
块之前连接到
):

测试输出:

WTF []
before
SOMETHING ADDED task function (task) {
          console.log('GOT TASK', task);
          task.name.should.equal(name);
          return done();
        }
SOMETHING ADDED data function (data) {
          return console.log('DATA TEST', data);
        }
SOMETHING ADDED error function (err) {
          return console.log('ERROR', err);
        }
after
TESTING function (task) {
          console.log('GOT TASK', task);
          task.name.should.equal(name);
          return done();
        }
WTF WE GOT DATA { execute: 
   { __v: 0,
     name: 'd699ecbf-eda8-4588-a96f-b58e8a1c9a2e',
     time: '2015-03-06T02:25:40.577Z',
     _id: '54f91010bf41ed23cfe19339',
     created_at: '2015-03-06T02:25:20.579Z',
     updated_at: '2015-03-06T02:25:20.579Z',
     opts: { some: 'data' } } }
WTF IS THIS JSON { execute: 
   { __v: 0,
     name: 'd699ecbf-eda8-4588-a96f-b58e8a1c9a2e',
     time: '2015-03-06T02:25:40.577Z',
     _id: '54f91010bf41ed23cfe19339',
     created_at: '2015-03-06T02:25:20.579Z',
     updated_at: '2015-03-06T02:25:20.579Z',
     opts: { some: 'data' } } }
wat []
errors []
errors [ [Function: ondata] ]
false
从日志中,添加了任务
的事件处理程序。经过一段时间后,从套接字接收数据(WTF我们得到数据),流将其解析为JSON,但当它调用
@emit
时,没有侦听器接收到事件。事实上,在这一点上,查看
task
的侦听器表明没有侦听器

我的听众去哪了


您可以在

上查看所有这些代码。我决定将学术方法留给更感兴趣的人,而放弃自定义套接字方法。我改为在服务器和客户端上使用Socket.io

constructor: (@opts = {})->
@opts.port ?= DEFAULT_PORT
@opts.baseURL ?= "http://localhost:#{@opts.port}"
@socket = SocketIO("http://localhost:#{@opts.port}")
是结果代码。用户引用
client.socket
,并侦听该套接字上的事件。效果很好

WTF []
before
SOMETHING ADDED task function (task) {
          console.log('GOT TASK', task);
          task.name.should.equal(name);
          return done();
        }
SOMETHING ADDED data function (data) {
          return console.log('DATA TEST', data);
        }
SOMETHING ADDED error function (err) {
          return console.log('ERROR', err);
        }
after
TESTING function (task) {
          console.log('GOT TASK', task);
          task.name.should.equal(name);
          return done();
        }
WTF WE GOT DATA { execute: 
   { __v: 0,
     name: 'd699ecbf-eda8-4588-a96f-b58e8a1c9a2e',
     time: '2015-03-06T02:25:40.577Z',
     _id: '54f91010bf41ed23cfe19339',
     created_at: '2015-03-06T02:25:20.579Z',
     updated_at: '2015-03-06T02:25:20.579Z',
     opts: { some: 'data' } } }
WTF IS THIS JSON { execute: 
   { __v: 0,
     name: 'd699ecbf-eda8-4588-a96f-b58e8a1c9a2e',
     time: '2015-03-06T02:25:40.577Z',
     _id: '54f91010bf41ed23cfe19339',
     created_at: '2015-03-06T02:25:20.579Z',
     updated_at: '2015-03-06T02:25:20.579Z',
     opts: { some: 'data' } } }
wat []
errors []
errors [ [Function: ondata] ]
false
constructor: (@opts = {})->
@opts.port ?= DEFAULT_PORT
@opts.baseURL ?= "http://localhost:#{@opts.port}"
@socket = SocketIO("http://localhost:#{@opts.port}")