使用rx-node库,我希望此代码能够正常运行。但它不会将socket
识别为stream
,
stream.pause();
^
TypeError: Cannot read property 'pause' of undefined
即使显示net
文档,也是如此。
如何获取stream
net.createServer()
部分
var RxNode = require('rx-node');
var server;
var sSocket;
server = net.createServer(function (socket) {
sSocket = socket;
});
var subscription = RxNode.fromStream(sSocket, 'ondata')
.subscribe(function (x) {process.stdout.write("Got data " + x + "\n"); });
server.listen(xxxxx, 'xxx.xxx.xx.xxx');
答案 0 :(得分:0)
是的,socket是一个流。你得到的问题不是它不是一个流,而是它未定义。请参阅文档:
类:net.Socket# 添加于:v0.3.4 此对象是TCP或本地套接字的抽象。 net.Socket实例实现双工流接口。它们可以由用户创建并用作客户端(使用connect()),也可以由Node.js创建,并通过'连接传递给用户。服务器的事件。 [强调补充]
当这个:
TypeError: Cannot read property 'pause' of undefined
给出了这个错误:
stream
这意味着stream
未定义,而不是它不是流。
在您的情况下,sSocket
很可能是您传递给RxNode.fromStream()
的{{1}}变量,只是通过查看代码显然未定义。评估顺序如下:
var sSocket; // (1)
server = net.createServer(function (socket) { // (2)
sSocket = socket; // (4)
});
var subscription = RxNode.fromStream(sSocket, 'ondata') // (3)
因为您可以看到您在定义之前尝试使用它。
现在,如何在定义之后使用它?你需要在net.createServer()
回调中使用它,或者在回调被触发后启动的某个函数中使用它。
您的代码的另一个问题是,您传递给net.createServer()
的功能是connectionListener
,它会自动设置为'连接的监听器。事件,你似乎正在使用它,就像它是其他东西。请参阅文档中的示例:
这与你想要做的完全一样。