Mik*_*ade 9 stream websocket node.js
我正在尝试使用websockets将数据从服务器流式传输到客户端 - 特别是ws和websocket流.但是,流似乎过早关闭,我只收到两个大块的数据.这是一个简单的例子.
我有一台服务器:
var WebSocketServer = require('ws').Server;
var websocketStream = require('websocket-stream');
var wss = new WebSocketServer({port: 8098});
var fs = require('fs');
var util = require('util');
wss.on('connection', function connect(ws) {
var stream = websocketStream(ws);
var rs = fs.createReadStream('foo.big');
rs.pipe(stream);
});
Run Code Online (Sandbox Code Playgroud)
以及使用pipe()连接并将foo.big流式传输到本地文件的客户端:
var fs = require('fs');
var util = require('util');
var websocket = require('websocket-stream');
var rs = fs.createWriteStream('big.out');
rs.on('open', function () {
var ws = websocket('http://localhost:8098');
ws.on('open', function () {
ws.pipe(rs);
}).on('error', function (err) {
console.log(err);
}).on('close', function (err) {
console.log("Closing");
});
});
Run Code Online (Sandbox Code Playgroud)
任何想法为什么我只会得到一些数据包?如果我将客户端中的调用移除到管道,并且只是以块的形式接收数据,它似乎会收到所有数据.
上述内容存在一些问题(截至 2017 年)。
fs.readStream() close事件websocket-stream open事件,因为您可以假设它是开放的此外,性能:ws可能不适合服务器到服务器的通信。考虑替代方案,例如net,像这里,或各种其他低于ws级别的方式。
在我的 GH 上找到完整的示例。
const fs = require('fs')
const websocket = require('websocket-stream')
const writeStream = fs.createWriteStream('big.out')
writeStream.on('open', () => {
let ws = websocket('http://localhost:8098')
ws.pipe(writeStream)
ws.on('error', (err) => {
if (err) throw err
}).on('close', (err) => {
if (err) throw err
console.log(`Closing ws with: ${fs.statSync('big.out').size} bytes`)
})
writeStream.on('close', () => {
console.log(`Closing file stream with: ${fs.statSync('big.out').size} bytes`)
})
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7901 次 |
| 最近记录: |