【发布时间】:2018-07-15 13:59:39
【问题描述】:
我有 socket.io 从服务器向客户端发送一个基本对象。这一点工作正常。
现在想使用event-stream(特别是区块链查询的结果)将流从服务器发送到客户端。我在浏览器控制台中得到了意想不到的结果..
var io = require('socket.io')(server);
var dsteem = require('dsteem')
var es = require('event-stream')
var util = require('util')
var client = new dsteem.Client('https://api.steemit.com')
var stream = client.blockchain.getBlockStream()
/* This sends results to stdout, fine
io.on('connection', function(socket){
stream.pipe(es.map(function(block, callback) {
callback(null, util.inspect(block) + '\n')
})).pipe(process.stdout);
// And this sends a simple object to the client
socket.emit('blockchainOps', {"Foo!":"Doo!"} );
});
*/
// Putting both together sends strange connection data to client
io.on('connection', function(socket){
socket.emit('blockchainOps', function() {
stream.pipe(es.map(function(block, callback) {
callback(null, util.inspect(block) + '\n');
}))
})
});
我在客户端控制台中得到的似乎是某种 TCP 套接字函数,
ƒ (){if(!n){n=!0;var r=a(arguments);u("sending ack %j",r),e.packet({type:i.ACK,id:t,data:r})}}
谁能帮助我了解发生了什么以及我做错了什么?
== 编辑更新 ==
按照 cmets 中的建议,我已尝试将 socket.io-stream 增强为 event-stream。
var es = require('event-stream')
var util = require('util')
var ss = require('socket.io-stream');
var stream = ss.createStream();
io.on('connection', function(socket){
ss(socket).emit('blockchainOps', stream, function(){
client.blockchain.getBlockStream()
.pipe(es.map(function(block, callback) {
callback(null, util.inspect(block) + '\n')
}))
.pipe(process.stdout)
}());
});
这次我在浏览器控制台中返回了一个套接字对象,这似乎不是我希望的流数据。
【问题讨论】:
标签: node.js sockets socket.io event-stream