【问题标题】:chat with particular user in node.js在 node.js 中与特定用户聊天
【发布时间】:2015-03-04 02:19:40
【问题描述】:

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

服务器端:

   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>

当我选择用户发送私人消息时,它不起作用。请帮助我的人

【问题讨论】:

    标签: javascript jquery html node.js socket.io


    【解决方案1】:

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

    您应该将消息发送到特定房间 - socket.to(...).emit(...),而不是使用 io.sockets.emit(...) 将消息发送给所有客户

    请看documentation

    这是抽象逻辑:

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-02-24
      • 1970-01-01
      • 2011-08-10
      • 1970-01-01
      • 1970-01-01
      • 2015-06-17
      • 2014-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多