Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Socket.io为套接字标识用户_Javascript_Node.js_Socket.io - Fatal编程技术网

Javascript Socket.io为套接字标识用户

Javascript Socket.io为套接字标识用户,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我写了一些代码示例,通过socket.io识别连接的用户。。。所以现在我必须在索引页上写一个代码来与用户通信 下面是代码,说明如何向用户[1]发送消息“欢迎”,并为用户[2]发送消息“HI-men”,以及如何限制与2个用户的连接。因此,当2个用户连接时,其他任何人都无法连接 Index.html: <script src="/socket.io/socket.io.js"></script> <script> var socket = io.connect

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

下面是代码,说明如何向用户[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>

你可以先看看如何使用它。回调提供的
handshakeData
可以在那里修改(即:添加用户名属性),任何更改都可以通过app.js中的
socket.handshake
访问(通过传入回调的
io.sockets.on('connection',…
)。使用也可从握手数据访问的请求标头信息,您可以在授权回调中设置用户值(即:从数据库),以便您可以在app.js中识别给定套接字的用户


我知道你问这个问题已经很久了,但就在4天前,我发布了一个node js、express和socket.io模块,它可以管理你想要的东西。检查用法和示例;我希望这个模块对你有所帮助

您可以通过NPM安装它

一些用法代码:

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

所以你想确定哪个用户连接到哪个套接字?有userNumber这样的变量是可以的,但从长远来看肯定对你没有帮助,我建议使用mongodb并开始在itI中存储值。我需要这个例子……所以我想了解如何向不同的用户发送不同的消息,以及如何从客户端t发送消息o服务器,然后处理消息…因此我需要例如等向用户发送onload消息[1]然后当消息被发送到创建一个div谁将desapire 5s-仅针对用户1…不针对用户2…以及如何向两个用户发送消息是否有一些教程或东西可以帮助我将其与MongoDB连接起来没有好的简单的基本示例…那么如何在我的脚本上做到这一点?有任何想法吗MPE不是针对任何数据库的,答案中没有dB代码。请访问mongoosejs.com了解MongoDB for Node。如果要查找MongoDB for Nodejs,只需获取官方库。我对两者都有经验,在更大的应用程序中,官方比mongoose更好。有了mongoose,你必须了解mongoose如何抽象mongo,这并不总是好的拥有的东西。
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..