2012-05-20 19 views
7

के लिए उपयोगकर्ता की पहचान करें मैं कुछ कोड उदाहरण लिखता हूं जो सॉफ़्ट.आईओ के माध्यम से कनेक्ट किए गए उपयोगकर्ताओं को पहचानता है ... तो अब मुझे उपयोगकर्ताओं के साथ काम करने के लिए इंडेक्स पेज पर एक कोड लिखना होगा।सॉकेट.ओ सॉकेट

कोड नीचे है और उपयोगकर्ता को [1] "स्वागत है" और उपयोगकर्ता [2] "HI पुरुष" के लिए एक संदेश भेजने के लिए और कनेक्शन fr 2 उपयोगकर्ताओं को सीमित भी करें। इसलिए जब 2 उपयोगकर्ता जुड़ा तो किसी और नहीं कर सकते कनेक्ट ..

Index.html:

<script src="/socket.io/socket.io.js"></script> 
<script> 
    var socket = io.connect(); 
    var users; 
    socket.on('hello', function (data) { 
    console.log(data.hello); 
    }); 
    socket.on('listing', function (data) { 
    users = data; 
    }); 
    socket.on('chat', function (message) { 
    console.log(message); 
    }); 
    socket.on('message', function (message) { 
    console.log(message); 
    }); 
    function chat (message) { 
    socket.emit('chat', message); 
    } 
    function message (user, message) { 
    socket.emit('message', { 
     user: user, 
     message: message 
    }); 
    } 
</script> 

app.js

var express = require('express'); 
var app = express.createServer(); 
var io = require('socket.io').listen(app); 

app.listen(3000); 

app.use(express.static(__dirname)); 

var users = {}; 
var userNumber = 1; 

function getUsers() { 
    var userNames = []; 
    for(var name in users) { 
    if(users[name]) { 
     userNames.push(name); 
    } 
    } 
    return userNames; 
} 

io.sockets.on('connection', function (socket) { 
    var myNumber = userNumber++; 
    var myName = 'user#' + myNumber; 
    users[myName] = socket; 

    socket.emit('hello', { hello: myName }); 
    io.sockets.emit('listing', getUsers()); 

    socket.on('chat', function (message) { 
    io.sockets.emit('chat', myName + ': ' + message); 
    }); 
    socket.on('message', function (data) { 
    users[data.user].emit('message', myName + '-> ' + data.message); 
    }); 

    socket.on('disconnect', function() { 
    users[myName] = null; 
    io.sockets.emit('listing', getUsers()); 
    }); 
}); 

app.listen(process.env.PORT); 
+0

ताकि आप जो उपयोगकर्ता जो सॉकेट से जुड़ा है पहचान करने के लिए करना चाहते हैं? – Dhiraj

+0

उपयोगकर्ता संख्या जैसे वैरिएबल ठीक है, लेकिन निश्चित रूप से यह लंबे समय तक आपकी मदद नहीं करेगा, मैं सुझाव देता हूं कि मैंगोडब के लिए जाएं और इसमें मूल्यों को संग्रहीत करना शुरू करें – Dhiraj

+0

मुझे इसे एक उदाहरण के लिए चाहिए ... इसलिए मैं समझना चाहता हूं कि कैसे भेजना है अलग-अलग उपयोगकर्ता को अलग संदेश और क्लाइंट से सर्वर पर एक संदेश भेजें और फिर संदेशों के साथ काम करें ... इसलिए मुझे उपयोगकर्ता को [1] को ऑनलोड संदेश भेजने के लिए उदाहरण आदि की आवश्यकता है और फिर जब संदेश भेजने के लिए संदेश भेजा गया था जो desapire होगा 5 एस - केवल उपयोगकर्ता 1 के लिए ... उपयोगकर्ता 2 के लिए नहीं ... और उपयोगकर्ता को – beginerplus

उत्तर

7

आप कैसे configure authorization with Socket.io पर एक नज़र लेने के द्वारा शुरू कर सकते हैं। कॉलबैक द्वारा प्रदान किए गए handshakeData को संशोधित किया जा सकता है (यानी: उपयोगकर्ता नाम संपत्ति जोड़ें), और आपके app.js में socket.handshake के माध्यम से कोई भी परिवर्तन सुलभ हो जाएगा (io.sockets.on('connection',.. के लिए कॉलबैक में पारित ऑब्जेक्ट के माध्यम से)। अनुरोध शीर्षलेख जानकारी का उपयोग करना जो हैंडशेकडेटा से भी सुलभ है, आप प्राधिकरण कॉलबैक (यानी: डेटाबेस से) के भीतर उपयोगकर्ता मान सेट कर सकते हैं ताकि आप अपने app.js. में दिए गए सॉकेट के लिए उपयोगकर्ता की पहचान कर सकें।

Here's a similar example

+0

mongodb – beginerplus

+0

के साथ उदाहरण है कि यह उदाहरण किसी भी डेटाबेस के लिए विशिष्ट नहीं है, उस उत्तर में कोई डीबी कोड नहीं है। नोड के लिए मोंगो डीबी सीखने के लिए mongoosejs.com पर जाएं। –

+0

यदि नोडजेस के लिए मोंगोडीबी की तलाश है, तो केवल आधिकारिक lib को पकड़ो। मुझे दोनों के साथ अनुभव है और आधिकारिक बेहतर है तो बड़े ऐप्स में mongoose। मोंगोज़ के साथ आपको सीखना होगा कि कैसे मोंगोज़ मोंगो को सार तत्व बनाता है और यह हमेशा अच्छी बात नहीं है। http://mongodb.github.io/node-mongodb-native/2.2/api/ –

3

मैं जानता हूँ कि यह एक लंबे समय किया गया है जब से तुम इस पूछा, लेकिन सिर्फ 4 दिन पहले मैं नोड js के लिए एक मॉड्यूल प्रकाशित, एक्सप्रेस और socket.io जो प्रबंधन करता है कि वास्तव में बात यह है कि आप चाहते थे। उपयोग और उदाहरण की जांच करें; मुझे आशा है कि आपको यह मॉड्यूल उपयोगी लगेगा!

आप NPM socket.io.users This is a node js module for socket.io applications. One user per client.

उपयोग कोड के कुछ के माध्यम से इसे स्थापित कर सकते हैं:

var express = require('express'); 
var app = express(); 
var server = require('http').createServer(app); 
var socketUsers = require('socket.io.users'); 

// ... 
socketUsers.Session(app); // IMPORTANT ! 
// ... 

var rootIo = require('socket.io')(server); // default '/' as namespace. 
var chatIo = rootIo.of('/chat'); 

var rootUsers = socketUsers.Users; /* default '/' as namespace. 
Each namespace has ITS OWN users object list, 
but the Id of a user of any other namespace may 
have the same value if request comes from the same client-machine-user. 
This makes easy to keep a kind of 
synchronization between all users of all the different namespaces. */ 

var chatUsers = socketUsers.Users.of('/chat'); // 

rootIo.use(socketUsers.Middleware()); 
/* IMPORTANT but no errors if you want 
to skip it for a io.of(namespace) 
that you don't want the socket.io.users' support. */ 

chatUsers.use(socketUsers.Middleware()); 

chatUsers.on('connected',function(user){ 
console.log(user.id + ' has connected to the CHAT'); 
user.store.username = 'username setted by server side'; /*at the store 
property you can store any type of properties 
and objects you want to share between your user's sockets. */ 
user.socket.on('any event', function(data){ 
/*user.socket is the current socket, to get all connected sockets from this 
user, use: user.sockets */ 

}); 
chatIo.emit('set username',user.store.username); 
}); 

rootUsers.on('connected',function(user){ 
    console.log('User has connected with ID: '+ user.id); 
}); 



rootUsers.on('connection',function(user){ 
    console.log('Socket ID: '+user.socket.id+' is user with ID: '+user.id); 
}); 

rootUsers.on('disconnected',function(user){ 
    console.log('User with ID: '+user.id+'is gone away :('); 
}); 

//...server.listen blabla.. 
संबंधित मुद्दे