与node.js中的特定用户聊天

这是我与所选用户进行私密聊天的代码。 它不会像私人信息一样向选定的用户发送信息。

服务器端:

var fs = require('fs'), http = require('http'), sio = require('socket.io'); var server = http.createServer( function(req, res) { if (req.url === '/index') { fs.readFile('./index.html', function(err, page) { res.writeHead(200, {'Content-Type': 'text/html'}); res.write(page); res.end(); }); } else if (req.url === '/karthick') { fs.readFile('./karthick.html', function(err, page) { res.writeHead(200, {'Content-Type': 'text/html'}); res.write(page); res.end(); }); } else if (req.url === '/raj') { fs.readFile('./raj.html', function(err, page) { res.writeHead(200, {'Content-Type': 'text/html'}); res.write(page); res.end(); }); } else if (req.url === '/Harendra') { fs.readFile('./Harendra.html', function(err, page) { res.writeHead(200, {'Content-Type': 'text/html'}); res.write(page); res.end(); }); } else if (req.url === '/send') { fs.readFile('./sendingmsg.html', function(err, page) { res.writeHead(200, {'Content-Type': 'text/html'}); res.write(page); res.end(); }); } else { res.writeHead(301, {Location: '/index'} ); res.end(); } }); server.listen(8000, function() { console.log('Server listening at http://192.168.1.16/8000'); }); io = sio.listen(server); // store messages var messages = []; io.sockets.on('connection', function(socket){ socket.on('chat message', function(msg){ console.log('Received: ', msg); messages.push(msg); io.sockets.emit('chat message', msg); }); messages.forEach(function(msg) { socket.send(msg); }) }); 

客户端:发送

 <!DOCTYPE html> <html> <body> <title>send message</title> <ul id="messages"></ul> <form action=""> <select> <option id="kar" value="karthick">karthick</option> <option id="raj" value="Raj">Raj</option> <option id="haren" value="Harendra">Harendra</option> </select><br /> <textarea id="m" rows="4" cols="50"> </textarea><br/> <button id=btn>Send</button> </form> <script src="https://cdn.socket.io/socket.io-1.1.0.js"></script> <script src="http://code.jquery.com/jquery-1.11.1.js"></script> <script> var socket = io.connect('http://192.168.1.21:8000'); $('form').submit(function(){ socket.emit('chat message', $('#m').val()); $('#m').val(''); return false; }); socket.on('disconnect', function() { $('#messages').append('<li>Disconnected</li>'); }); </script> </body> </html> 

收到客户:1

 <!DOCTYPE html> <html> <body> <title>Users</title> Welcome Harendra <ul id="messages"></ul> <script src="/socket.io/socket.io.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script> <script> $(function(){ var socket = io.connect(); socket.on('connect', function () { socket.on('message', function(message) { $('#messages').append($('<li>').text(message)); }); socket.on('disconnect', function() { $('#messages').append('<li>Disconnected</li>'); }); }); }); </script> </body> </html> 

当我select用户发送私人信息它不工作。 请帮助我一个人

您在服务器套接字实现中缺less一些逻辑。

而不是发送消息到所有与io.sockets.emit(...)客户端,你应该把它发送到一个特定的房间 – socket.to(...).emit(...)

请看看文档

这是抽象的逻辑:

  1. 您的套接字应该属于某个房间,以便接收“私人”消息( socket.join(...)

     socket.join('roomName'); 
  2. 您应该将您的“私人”消息广播到特定的房间,而不是将其广播给所有客户。 你可以指定房间( socket.to(...) ):

     socket.to('roomName').emit('chat message', msg);