Mongodb 编辑我的HTTP调用以使用套接字(socket.io)通过Angular 2应用程序中的Observable接收数据
现在我的Angular 2应用程序中有一个http get调用处理来自api的数据。现在我们通过socket.io切换到使用sockets。我一直在使用observable来获取数据,我知道我可以在使用socket.io sockets时继续这样做。但是我很难弄清楚它到底应该是什么样的——也就是说,我需要如何编辑我的getByCategory函数调用来通过套接字连接接收数据。这就是我的getByCategory函数当前在客户端服务中的样子:Mongodb 编辑我的HTTP调用以使用套接字(socket.io)通过Angular 2应用程序中的Observable接收数据,mongodb,angular,socket.io,Mongodb,Angular,Socket.io,现在我的Angular 2应用程序中有一个http get调用处理来自api的数据。现在我们通过socket.io切换到使用sockets。我一直在使用observable来获取数据,我知道我可以在使用socket.io sockets时继续这样做。但是我很难弄清楚它到底应该是什么样的——也就是说,我需要如何编辑我的getByCategory函数调用来通过套接字连接接收数据。这就是我的getByCategory函数当前在客户端服务中的样子: private _url: string = '
private _url: string = 'https://api.someurl';
getByCategory() {
return this._http.get(this._url)
.map((response:Response) => response.json())
.catch(this._errorsHandler);
}
_errorsHandler(error: Response) {
console.error(error);
return Observable.throw(error || "Server Error");
}
在服务器端,这就是我的函数导出在mongoDB设置中的样子(已经设置为通过socket.io使用套接字):
我应该如何编辑getByCategory函数以在服务中使用socket.io而不是http?我是否需要来自api的emit函数来在Angular 2服务中执行操作?或者我可以调整当前的getByCategory函数以使用现有observable中的套接字吗
我考虑编辑函数,使其看起来像这样:
getByStage() {
this.socket.on('getByCategory')
.map((response:Response) => response.json())
.catch(this._errorsHandler);
}
}
。。。但要做到这一点,我需要服务器函数导出,以便通过“emit”或类似的方式使其可用,不是吗?如果我那样做行吗?我在这里遗漏了什么吗?如果您需要使用套接字连接(如),您应该依赖回调 因此,您应该设置回调函数来使用它们 这里给出了一个演示-
import { Subject } from 'rxjs/Subject';
import { Observable } from 'rxjs/Observable';
import * as io from 'socket.io-client';
export class ChatService {
private url = 'http://localhost:5000';
private socket;
sendMessage(message){
this.socket.emit('add-message', message);
}
getMessages() {
let observable = new Observable(observer => {
this.socket = io(this.url);
this.socket.on('message', (data) => {
observer.next(data);
});
return () => {
this.socket.disconnect();
};
})
return observable;
}
}
有关将Angular2与socket.io一起使用的完整教程,请参见
希望你能得到答案。据我所知,这是不可能的。您应该将套接字对象映射到套接字连接,并设置回调以使用它们。因此,您的意思是在服务器和客户端之间使用“发射”和“打开”之类的方法吗?是的,伙计:)给出了答案,请尝试一下,并让我知道这是否解决了您的问题。谢谢您澄清,这不是真的可以通过其他方式解决的,Abrar。我将调整服务器和客户端以使用“发出”、“打开”和回调。
import { Subject } from 'rxjs/Subject';
import { Observable } from 'rxjs/Observable';
import * as io from 'socket.io-client';
export class ChatService {
private url = 'http://localhost:5000';
private socket;
sendMessage(message){
this.socket.emit('add-message', message);
}
getMessages() {
let observable = new Observable(observer => {
this.socket = io(this.url);
this.socket.on('message', (data) => {
observer.next(data);
});
return () => {
this.socket.disconnect();
};
})
return observable;
}
}