簡體   English   中英

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

[英]How best to integrate socket.io with rest in Angular2

當用戶與數據庫交互時,我想在Angular(6)應用程序中進行實時更新,因此我正在使用socket.io進行此操作。

例如,我有一個工作組件/表單/服務,而我目前的方法是:

  • jobjob-form提交到job.service
  • 這將調用一個http帖子來表達(並返回一個可觀察到的):

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

  • 當可觀察到的接收成功時,調用我的socket.service上的一個函數,該函數向服務器發出套接字消息
  • 服務器聽到此消息並向所有客戶端發出“ refreshJobs”消息
  • socket.service聽到此消息並從job.service更新作業

這可以正常工作,但似乎很費勁...有更好的方法嗎? 我可以使用套接字並繞過Express REST API嗎?

基本上,您是將作業發布到服務器上,然后在客戶端上獲得成功,然后再次通過套接字推送成功,然后通過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'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM