gpt4 book ai didi

node.js - 用 nock 模拟一个开放的网络套接字

转载 作者:搜寻专家 更新时间:2023-11-01 00:41:50 28 4
gpt4 key购买 nike

我正在尝试使用 nock 对针对 Oanda 的交易 API 编写的代码运行回测。为此,我需要模拟流式价格 API(请参阅 http://developer.oanda.com/rest-practice/streaming/ 中的 Rates Streaming)。但是,nock 似乎只允许您使用单个回复进行回复,即使回复是一个流。有什么方法可以将数千个价格事件流作为对单个请求的单独响应发送吗?

var scopeStream = nock('https://stream-fxpractice.oanda.com')
.persist()
.filteringPath(function(path) {
return '/stream';
})
.get('/stream')
.reply(function(uri, requestBody) {
return [200, {"tick":{"instrument":"AUD_CAD","time":"2014-01-30T20:47:08.066398Z","bid":0.98114,"ask":0.98139}}]
})

最佳答案

根据这个Nock documentation您可以在回复中返回一个 ReadStream。

我使用了 stream-spigot npm 包拿出下面的例子(用来模拟一个 Marathon 事件流):

const nock = require('nock');

const EventSource = require('eventsource');
const spigot = require('stream-spigot');

let i = 0;

nock('http://marathon.com')
.get('/events')
.reply(200, (uri, req) => {
// reply with a stream
return spigot({objectMode: true}, function() {
const self = this;
if (++i < 5)
setTimeout(() => this.push(`id: ${i}\ndata: foo\n\n`), 1000);
})
});

const es = new EventSource('http://marathon.com/events');

es.onmessage = m => console.log(m);

es.onerror = e => console.log(e);

关于node.js - 用 nock 模拟一个开放的网络套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31504946/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com