Php 私人消息的问题

Php 私人消息的问题,php,node.js,socket.io,Php,Node.js,Socket.io,请注意:我知道这可能是其他问题的重复,但我希望获得代码方面的帮助 我正在尝试为我的社交网络构建聊天功能。我使用了node.js和socket.io…这段代码的问题是,消息将传递给每个连接的用户,而不仅仅是目标用户…这段代码的源代码来自Newboston教程。。。 到目前为止,我已经像这样建造了它: client.php 我想添加以下功能: *(a) *由于它是一个社交网络,它应该能够为私人聊天、betn 2登录用户提供服务。。。 (b) 消息应该在接收者稍后重新登录后由接收者接收 我已经在goo

请注意:我知道这可能是其他问题的重复,但我希望获得代码方面的帮助

我正在尝试为我的社交网络构建聊天功能。我使用了node.js和socket.io…这段代码的问题是,消息将传递给每个连接的用户,而不仅仅是目标用户…这段代码的源代码来自Newboston教程。。。 到目前为止,我已经像这样建造了它:

client.php

我想添加以下功能: *(a) *由于它是一个社交网络,它应该能够为私人聊天、betn 2登录用户提供服务。。。 (b) 消息应该在接收者稍后重新登录后由接收者接收

我已经在google n上搜索了很多页面,听说房间是我的目标。但是作为nodejs中的一个noob,idk如何实现房间以使私人消息传递成为可能。。。
如果有人能帮我编写代码,甚至让我走上正确的道路,在这里我可以学习在node.js中编写代码,并为初学者提供简单的教程,这真是一个gr8帮助!!先走一步

看起来,应用程序中的每个用户都应该有唯一id

逻辑

1.您必须在输出\u userId上从后端(服务器端)发出事件

  • 您的前端(客户端)应该在output\u userId
  • 这就像您从服务器端为特定用户发送消息,每个用户都将监听输出\u userId,这是他们的特定id。其中userId是项目的唯一id

    例如:

    我们有3个用户 1,2,3

    现在,如果用户1正在向用户2发送消息

    你的活动应该是

    服务器端

    Socket.emit(输出_1)

    客户端

    每个客户端用户都应该监听他们的输出用户ID

    对于用户1,它应该是输出1

    对于用户2,它应该是输出2


    对于用户3来说,它应该是输出的\u 3

    javascript是客户端的,如果您计划发布它或将其从本地主机上取下,或者为了更好的实践,请学习使用PHP进行数据库查询,并在类似jQuery的东西中使用AJAX请求。。你可以研究“帮我编码”。所以这不是免费的编码服务。除此之外,询问有关教程或其他非网站资源的提示对于SO来说是离题的。在这里阅读更多:Magnus,说“帮助我编写代码”并不一定意味着我要求ppl为我编写代码..我所需要的只是帮助..我不要求任何人重新编写代码..我已经有代码要构建..而且,上面的代码基于一组教程,仅此而已。。我不是在问关于非现场主题的提示:)这很难接受:“cud help me code It”除了你在问代码以外的任何其他方式。“我可以在哪里学习node.js中的代码,并为初学者提供简单的教程”是要求提供非现场教程,不是吗?如果您有问题的nodejs代码,请在问题中发布相关部分,并告诉我们您面临的具体问题。现在,您的问题是如何获得broad.tnq fr ur响应…我的疑问是:我为每个获得frm php…Bt的用户都有唯一的用户id,我如何将其放入node.js,以及如何将用户id分配给相应的聊天室?node对此没有什么不同,它的socket.io在node中与在php中相同。您可以这样做=>当您的用户从客户端发送消息时,获取发送消息的用户的用户ID,消息将发送给该用户,已发送的消息,并使用它们将数据存储在数据库中,并向其他用户发出套接字事件,正如我在上面的回答中告诉您的,因此user2作为接收器的代码是:socket.emit('msg',output_2_id)?从客户端获取output2\u id的地方??不,应该是套接字。emit(output2\u id,'message')第一个参数是客户端正在侦听的变量。哦,我将尝试使用n rply…tq fr ur response
    <div class="chat" hidden>
        <textarea class="chat-name"><?php echo escape($data->username); ?></textarea>
        <div class="chat-messages">
        <?php 
         $chtrndr = $cht->renderchats(escape($data->id));
         foreach ($chtrndr as $chtrndrs) {
           echo '<div>' . $chtrndrs['m_from'] . ': ' . $chtrndrs['m_text'] . '</div><br>';
         }
         ?>
        </div>
        <textarea class="chat-textarea" placeholder="Type your message"></textarea>
        <div class="chat-status">Status:<span>Idle</span></div>
        </div>
        <!-- <script src="/socket.io/socket.io.js"></script> -->
        <script src="http://127.0.0.1:8080/socket.io/socket.io.js"></script>
        <script src="server.js"></script>
        <script>
        (function(){
          var getNode = function(s) {
            return document.querySelector(s);
          },
    
          //get required nodes
          status = getNode('.chat-status span'),
          messages = getNode('.chat-messages'),
          textarea = getNode('.chat-textarea'),
          chatName = getNode('.chat-name'),
          statusDefault = status.textContent,
    
          setStatus = function(s) {
            status.textContent = s;
    
            if(s!==statusDefault)
            {
              var delay = setTimeout(function(){
                setStatus(statusDefault);
                clearInterval(delay);
              },3000);
            }
          };
    
          setStatus('testing');
    
          try {
            var socket = io.connect('http://127.0.0.1:8080');
          }
          catch(e)
          {
            //set status to warn user
          }
    
          if(socket!==undefined)
          {
            //listen for output
            socket.on('output',function(data){
              if(data.length)
              {
                //loop through results
                for(var x=0;x<data.length;x=x+1)
                {
                  var message = document.createElement('div');
    
                  message.setAttribute('class','chat-message');
                  message.textContent = data[x].m_from + ': ' + data[x].m_text;
    
                  //append
                  messages.appendChild(message);
                  messages.insertBefore(message, messages.firstChild);
                }
              }
            });
            //listen for a status
            socket.on('status',function(data){
              setStatus((typeof data === 'object') ? data.message : data);
    
              if(data.clear === true)
              {
                textarea.value = '';
              }
            });
            //listen for keydown
          textarea.addEventListener('keydown',function(event){
              var self = this,
                fname = <?php echo escape($_SESSION['user']); ?>,
                tname = <?php echo $data->id; ?>;
    
              if(event.which === 13 && event.shiftKey === false) {
                socket.emit('input', {m_from:fname, m_to:tname, m_text:self.value});
                event.preventDefault();
              }
            });
          }
        })();
        </script>
    
    var client = require('socket.io').listen(8080).sockets;
    var express = require('express');
    var app = express();
    var mysql  = require('mysql');
    var path = require('path');
    var dbconn = mysql.createConnection({
      host     : 'localhost',
      user     : 'root',
      password : '',
      database : 'test'
    });
    
    app.use(express.static(path.resolve(__dirname, './css/')));
    
    app.get('/',function(req,res){
        res.sendFile(__dirname + '/index.html');
    });
    
        dbconn.connect(function(err){
            if(err){
        console.log('Database connection error');
      }else{
        console.log('Database connection successful');
      }
            client.on('connection',function(socket){
    
              console.log('Data received from Db');
    
                sendStatus = function(s){
                    socket.emit('status',s);
                };
    
                //wait for input
                socket.on('input',function(data){
                    var fname = data.m_from,
                        tname = data.m_to,
                        m_text = data.m_text,
                        whitespacePattern = /^\s*$/;
    
                    if(whitespacePattern.test(m_text))
                    {
                        sendStatus('message is required');
                    }
                    else
                    {
                        var record = { m_from: fname, m_to:tname, m_text: m_text };
                        dbconn.query('INSERT INTO messages SET ?', record, function(err,res){
                         if(err) throw err;
    
                            client.emit('output',[data]);
    
                            sendStatus({
                                message: "message sent",
                                clear: true
                            });
                        });
                    }
    
                });
            });
        });