我正在尝试从服务器向客户端发送(中继)连续的utf-8数据流。虽然我可以关注到达服务器的数据,但我无法将其传输到Socket并将其转发给客户端。
Nodejs Server,
var io = require('socket.io')(server);
app.io = io;
var dsteem = require('dsteem')
var es = require('event-stream')
var client = new dsteem.Client('https://api.steemit.com')
var ss = require('socket.io-stream');
var outBoundStream = ss.createStream();
var stream = client.blockchain.getBlockStream();
io.on('connection', function(socket) {
/* Eyeball the data in the nodejs console */
stream.pipe(es.map(function(block, callback) {
callback(null, util.inspect(block, {colors: true, depth: null}) + '\n')
})).pipe(process.stdout);
/* Send stream data to client */
ss(socket).on('ready', function(){
console.log('Here it comes...');
ss(socket).emit('sending', function(){
stream.pipe(es.map(function(block, callback) {
callback(null, util.inspect(block, {colors: true, depth: null}) + '\n')
}));
});
});
ss(socket).on('disconnect', function(){
console.log('Disconnected');
});
});
我在nodejs控制台中看到的来自.getBlockStream()
的数据看起来像这样的剪辑,
{['1b3c0394d1146cecdc0b5d38486f0b99a6d7c750',
'85e3110930f87510b4782d50de86180ecbacf05d',
'7cbd01b2a9d515736860014eabbc18893707e0c4',
'307308574fec6336493d0a9713ee98da21bbc1a7',
'9cb1636cdb2591361b7d7e4c9d04096c1bc93aff',
'27d22c51a6f3e0d764039b095046ec563e53ae6b',
'153451e251816823e3342d2f0b1425570d0f3d36',
'0a17b03e9fddfde49ad632dfe2437d76321c34eb',
'fdd23d78865d1855b16d171d24199dd4e2fba83a',
'306e6f2b11e6bd6e2ef37acbe6e593ef2d1c0e1e' ] }
客户端,
<script src="/socket.io/socket.io.js"></script>
<script src="/javascripts/socket.io-stream.js"></script>
<script>
$(function () {
var socket = io();
ss(socket).emit('ready', 'Client ready, send me a stream...');
ss(socket).on('sending', function(stream, d){
console.log(stream);
});
});
</script>
在浏览器控制台中,我只看到此功能,
ƒ () {
var args = slice.call(arguments);
args = self.encoder.encode(args);
ack.apply(this, args);
}
任何人都可以帮助我理解我做错了吗?
答案 0 :(得分:7)
问题出现是因为您有以下代码
ss(socket).emit('sending', function(){
stream.pipe(es.map(function(block, callback) {
callback(null, util.inspect(block, {colors: true, depth: null}) + '\n')
}))
emit
方法的第二个参数需要数据,并且您正在向它发送一个函数,因此您在客户端收到的是一个空白函数
修复很简单,只需发送数据
io.on('connection', function(socket) {
/* Eyeball the data in the nodejs console */
/* Send stream data to client */
ss(socket).on('ready', function(){
console.log('Here it comes...');
stream.pipe(es.map(function(block, callback) {
ss(socket).emit('sending', block);
callback(null, util.inspect(block, {colors: true, depth: null}) + '\n')
})).pipe(process.stdout);
});
ss(socket).on('disconnect', function(){
console.log('Disconnected');
});
});
完成后,您可以在客户端看到数据