gpt4 book ai didi

angular - 使用 angular2 使用 RESTapi 流

转载 作者:太空狗 更新时间:2023-10-29 18:14:27 24 4
gpt4 key购买 nike

如何使用 angular2 消费“永无止境”的数据流?我正在编写一个小聊天应用程序,其中包含一个用 go 编写的服务器和一个用 angular2 编写的客户端。对于推送服务,我实现了一个端点来保持连接。授权用户可以使用 GET 请求连接到 server.com:123/broker 上的消息代理。每次给用户的新消息到达时,它都会以 json 对象的形式发送给代理。然而,当使用 normale 语法时,我不会得到任何结果(因为代码等待连接关闭,正如我所想的那样):

return this._http.request(req).map( (res: Response) => {    
return res.json();
}).subscrube( results => {
console.log("results arrived", results);
});

使用流有很多优势(比如使用 rest api 的视频流,太棒了)。有办法做到这一点吗?

/edit:这里有更多信息:我检查了 http 交易,它们看起来没问题:

GET /broker HTTP/1.1
User-Agent: curl/7.35.0
Host: mydomain.com:12345
Accept: */*
Authorization: Bearer [JWT]

服务器用响应 header 回答:

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Mon, 01 Feb 2016 11:16:45 GMT
Transfer-Encoding: chunked

[然后客户端监听此连接,直到服务器将某些内容推送到流中

ba
{"target":"56addcef7bec6d5785ee6945","payload": ...}

到目前为止似乎是正确的。我可以看到 block 的大小(以十六进制 (ba) 表示)、CRLF、有效负载 (json) 和最终的 CRLF。所以,当谈到 HTTP 标准时,一切似乎都还不错。但是,我的 Angular2 不会获取 block 。

最佳答案

正如其中一条评论中已经提到的,Angular2 本身目前无法做到这一点,功能请求已经记录在案(从 06/2015 开始):查看 here

为了在功能实现之前让一切正常运行,我现在 Oboe.js作为外部 API。

package.json中添加依赖:

"dependencies": {
"oboe": "*",
...
},

不要忘记运行 npm install 或下载软件包等。

index.html 中包含双簧管

<script src="node_modules/oboe/dist/oboe-browser.min.js"></script>

使用双簧管消费 http 流

import {Injectable, OnInit} from 'angular2/core';

// Declare oboe as a Variable
declare var oboe: any;

@Injectable()
export class BrokerService {
private oboeService: any;
constructor() {
this.listen();
}

listen(): void {
console.log("registering message broker")
var config = {
'url': 'https://you-streaming-api.com:123/broker',
'method': "GET",
'headers': {'Authorization': 'Bearer ' + this._jwToken },
'body': '',
'cached': false,
'withCredentials': true
}
this.oboeService = oboe(config);
// The '!' will only consume complete json objects
this.oboeService.node ('!', function (thing) {
console.log("new broker message", thing);
});
}
}

关于angular - 使用 angular2 使用 RESTapi 流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35115764/

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