如何最好地将Socket.io与Angular2中的其余部分集成

时间:2018-08-23 20:32:35

标签: angular rest express socket.io real-time

当用户与数据库进行交互时,我想在Angular(6)应用程序中进行实时更新,因此我正在使用socket.io进行此操作。

例如,我有一个工作组件/表单/服务,而我目前的做法是:

  • job中的job-form提交给job.service
  • 这会调用一个http帖子来表达(并返回可观察到的内容):

    return this.http.post(api_url + '/jobs/', job);
    
  • job插入mongoDB并返回成功

  • 当Observable成功接收到时,请在我的socket.service上调用向服务器发出套接字消息的函数
  • 服务器听到此消息并向所有客户端发出“ refreshJobs”消息
  • socket.service听到此消息并更新job.service中的作业

这很好用,但似乎很费劲...有更好的方法吗?我可以使用套接字并绕过Express REST API吗?

1 个答案:

答案 0 :(得分:0)

基本上,您是将作业发布到服务器上,然后在客户端上获得成功,然后再次通过套接字推送成功,然后通过socket.io流向前端的其他人。 更好的方法是通过套接字发出新作业,在套接字中您可以保存新作业,成功后可以向所有人发出。 另一种方法是侦听mongoDB(https://www.mongodb.com/blog/post/an-introduction-to-change-streams)中的更改并散发给其他人。

也许最好的方法是这样:

const app = express();
const server = require('http').Server(app);
const io = require('socket.io').listen(server);
app.set('socketio', io);

例如,在您的路线中,您可以执行以下操作:

var io = req.app.get('socketio');
io.emit('room', 'hi'); // this will emit 'hi' in room 'room'