你可以實現你想找與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場景,並且建立更多的功能,如果說一個經理或一個特殊的個人想要查看該模式出於某種原因或根本沒有。
我明白了,我不知道。謝謝。但是我是否需要一遍又一遍地觸發事件,或者一旦其他用戶登錄後事件會自動發送?我可能會嘗試與socketio –
它會處理該事件每當有人連接到網頁並投放一個插座,讓您發回關於當前正在觀看什麼,或者不允許更改或根本就沒有呈現按鈕的信息'connection'打/模塊的鏈接。 –
澄清'connection'內的代碼在每次有人連接時處理。您還可以添加一個'socket.on(「脫節」,()=> {})'將每當有人斷開運行,讓您搶他們可能有任何打開的模態,並關閉他們'Mongodb'內。 –