2017-05-08 22 views
1

鑑於這一情況:如何通知其他用戶在一定的模式是開放

用戶(客戶代理)應該知道,如果模式是目前其他客戶支持打開,以避免在處理數據衝突。因此,例如我打開模式,它應該通知其他用戶,「嘿,這是正在處理,去做其他的東西」

由於該項目使用meteor.js我認爲利用其實時特徵。我想在每個模式中存儲(MongoDB)一個狀態(如果它是開放的或者不存在的話)(因爲每個模式都是數據),當然如果用戶關閉模式,我們可以設置「關閉狀態」(如果他沒有繼續處理數據),但是如果用戶不小心關閉了瀏覽器選項卡/瀏覽器窗口/停電怎麼辦?那麼數據永遠會被設置爲「打開」。

我也考慮過使用套接字。 (即socketIO),因此它將向其他用戶發佈每當用戶打開模式時打開的當前模式的數據,因此用戶打開模式 - >套接字,通知其他用戶打開哪種模式。但如果用戶打開模式 - >套接字通知其他用戶 - >然後另一個用戶登錄到系統(這意味着他沒有得到套接字通知,並可能最終打開相同的模式)

因此,任何推薦/創意/提示,你想分享?

我使用Meteor.js,JS做出反應,MongoDB的爲我的數據庫。

回答

1

你可以實現你想找與socket.io的你會如何處理通知其他的例子用戶只需在服務器中創建一個Map()即可獲得有關當前打開的模式以及訪問它們的用戶的信息,下面列出了一些可能會給你的代碼如何做到這一點的想法ND:

//client side 
function modals(socket) { 

    this.sendModalOpen = (modalIdentifier) => { 

     socket.emit('openedModal', { 
      modal: modalIdentifier 
     }); 
    }; 

    this.closeModal =() => { 
     socket.emit('closedModal', { 
      modal: modalIdentifier 
     }); 
    }; 

} 


socket.on('recModalInfo', (data) => { 
    for (let x = 0; x < data.info.length; x++) { 
     console.log(data.info[x][0] + " has open " + data.info[x][1]); 
    } 
}); 

//server side 
let modal = new Map(); 

io.on('connection', (socket) => { 

    //Here we are sending any new connections a list of all current modals being viewed with Identifiers. 
    //You could send all of the items inside the map() using map.entries 

    let currentInfo = []; 

    modal.forEach((value, key) => { 
     currentInfo.push([key, value]); 
    }); 

    socket.emit('recModalInfo', { 
     info: currentInfo 
    }); 

    socket.on('openedModal', (data) => { 
     modal.set(socket.id, data.modalIdentifier); 
    }); 

    socket.on('closedModal', (data) => { 
     modal.delete(socket.id); 
    }); 

}); 

我已經包含了客戶端和服務器端,但你顯然不使用香草的JavaScript這裏的客戶方代碼更多的是需要採取什麼措施,你可以適應的表示。

但如果用戶打開哪一個模式 - >插座通知其他用戶 - > 然後其他用戶登錄到系統中(這意味着他沒有得到 插座通知,並可能最終打開同一模式。

當用戶連接到服務器並創建一個套接字io.on('connection', (socket)=>{ });是一直跑這讓我們再送出一個EMIT詳細介紹了目前所有的模態的開放和標識。

用戶(客戶代理)應該知道該模式當前是否由 其他客戶支持打開以避免處理數據時發生衝突。

由於您的客戶端將收到有關當前打開的模塊的信息,您可以選擇通過不呈現用於訪問模式的代碼來使它們在DOM上不可用。你也可以在地圖上處理一張支票,如果它是一個1-1場景,並且建立更多的功能,如果說一個經理或一個特殊的個人想要查看該模式出於某種原因或根本沒有。

+0

我明白了,我不知道。謝謝。但是我是否需要一遍又一遍地觸發事件,或者一旦其他用戶登錄後事件會自動發送?我可能會嘗試與socketio –

+1

它會處理該事件每當有人連接到網頁並投放一個插座,讓您發回關於當前正在觀看什麼,或者不允許更改或根本就沒有呈現按鈕的信息'connection'打/模塊的鏈接。 –

+1

澄清'connection'內的代碼在每次有人連接時處理。您還可以添加一個'socket.on(「脫節」,()=> {})'將每當有人斷開運行,讓您搶他們可能有任何打開的模態,並關閉他們'Mongodb'內。 –

相關問題