当我生成Hyperledger Composer REST服务器(请参阅https://hyperledger.github.io/composer/latest/integrating/getting-started-rest-api)时,我可以选择是否要通过WebSockets启用事件发布(是/否)。
使用命令
yo hyperledger-composer
我使用生成的休息服务器生成了一个角度应用程序。
我的期望如下:
如果我没有通过WebSockets为composer-rest-server启用事件发布,则角度应用程序(为此composer-rest-server生成)将使用普通的http请求来联系composer-rest-server。
这种期望得到了满足。 angular app中的(自动生成的)文件data.service.ts使用普通的http请求来联系服务器。以下是该文件的摘录:
public getAll(ns: string): Observable<Type[]> {
console.log('GetAll ' + ns + ' to ' + this.actionUrl + ns);
return this.http.get(`${this.actionUrl}${ns}`)
.map(this.extractData)
.catch(this.handleError);
}
public getSingle(ns: string, id: string): Observable<Type> {
console.log('GetSingle ' + ns);
return this.http.get(this.actionUrl + ns + '/' + id + this.resolveSuffix)
.map(this.extractData)
.catch(this.handleError);
}
public add(ns: string, asset: Type): Observable<Type> {
console.log('Entered DataService add');
console.log('Add ' + ns);
console.log('asset', asset);
return this.http.post(this.actionUrl + ns, asset)
.map(this.extractData)
.catch(this.handleError);
}
我的另一个期望是:
如果我通过WebSockets为composer-rest-server启用事件发布,则角度应用程序(为此composer-rest-server生成)将使用websockets联系composer-rest-server。
这种期望没有得到满足。角度应用程序中的(自动生成的)文件data.service.ts看起来完全相同(独立于是否为启用或禁用Web套接字的composer-rest-server生成角度应用程序)。也就是说,正常的http请求用于联系服务器。
为什么?我是否必须手动更改文件“data.service.ts”中的代码,如果我想使用网络套接字(用“ws”代替“http”)或者我在这里遗漏了什么?
答案 0 :(得分:2)
是的,你会替换。因此,您的websockets服务器正在ws://localhost:3000
上提供服务。然后,您使用WS客户端订阅事件(您可以使用wscat
作为WS客户端进行测试 - 即发布事件然后查看客户端接收事件)。见https://hyperledger.github.io/composer/latest/integrating/publishing-events.html
或写下类似的内容:
var ws = new WebSocket('ws://www.your.server.com');
ws.on('message', function incoming(data) {
console.log(data);
});
// or
ws.onmessage = function (event) {
console.log(event.data);
}
等