Socket.io识别Socket的用户

我写了一些代码示例,通过socket.io来识别连接的用户…所以现在我必须在索引页面上编写一个代码来与用户交stream。

代码如下以及如何向用户[1]“欢迎”和用户[2]“HI men”发送消息,并限制连接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); 

您可以先看看如何使用Socket.ioconfiguration授权 。 callback提供的handshakeData可以在那里被修改(即:添加一个用户名属性),任何改变都可以通过你的app.js中的socket.handshake访问(通过传递给io.sockets.on('connection',..的callback对象io.sockets.on('connection',.. )。使用也可以从handshakeData访问的请求头信息,可以在授权callback中设置用户值(即:从数据库中),以便在app.js中识别给定套接字的用户。

这里有一个类似的例子

我知道你问这个问题已经很长时间了,但是就在4天前,我发布了一个节点js,express和socket.io的模块,pipe理你想要的东西。 检查用法和示例; 我希望你会发现这个模块有帮助!

您可以通过NPM来安装socket.io.users这是一个用于socket.io应用程序的节点js模块。 每个客户一个用户。

一些使用代码:

 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..