2015-11-03 58 views
1

這裏是我想達到與Socket.io的最新版本是什麼,即1.3.7使用socket.io v1.3.x從單個用戶發送到一組預定義的用戶請求

一個記錄成員用戶可以將相同的信息廣播給一組預定義的管理員用戶。並且一個管理員用戶可以接收來自特定成員用戶的響應。全部實時。

例如,來自紐約的用戶只需要發送實時請求那些誰也來自紐約的管理員。而在管理面板上,紐約的管理員只會收到紐約用戶的請求。並且該用戶不知道來自紐約的另一個用戶連接到同一個房間。

Socket.io +1.0提供命名空間和創建房間的功能,和我在想,所提到的功能,可以通過創建房間來實現。但是我的問題在於圍繞我的頭部利用房間的這個要求。

我已到目前爲止,當需要一個房間被當地,即紐約的名稱動態創建的猜測;

var room = 'new york' // string coming from client 
socket.join(room); 

紐約的用戶和管理員都會連接到房間。但是,問題在於管理員只能看到用戶的請求,而不能看到其他管理員的請求,與用戶無法查看紐約其他用戶的請求一樣。

這個系統是否可以使用房間來實現,或者有其他解決方法嗎?

回答

0

我提出一個不同的解決方案: 當用戶連接有這樣的事情:

io.on('connection', function(socket){ ... 

之前的代碼創建數組變量來存儲額外數據的所有插座:

var connectionList = []; 
io.on('connection', function(socket){ 
    var connection = { 
    socket:socket, 
    city: userCity, 
    role: userRole 
    ... 
    } 
    connectionList.push(connection); 
} 

現在當您想要發送消息時,您可以遍歷所有套接字併發送到僅符合特定條件的消息,例如當用戶發送請求時:

socket.on('somerequest', function(data){ 
    if(<some validation rules for data>){ 
    connectionList.forEach(function(otherConnection){ 
     if(<some conditions to send message>){ 
     otherConnection.socket.emit('message', somedata); 
     } 
    }); 
    } 
}); 

這給你配置的巨大可能性。

但記得從列表中關閉的連接中刪除! 類似這樣的:

socket.on('disconnect', function(){ 
    var i = connectionList.indexOf(connection); 
    delete connectionList[i]; 
    connection = null; 
}); 
相關問題