Javascript PHP私有聊天长轮询集成

Javascript PHP私有聊天长轮询集成,javascript,php,jquery,ajax,mysqli,Javascript,Php,Jquery,Ajax,Mysqli,我有一个简单的问题 我的聊天html中有一个表单: <form action="../addchat.php" method="POST" enctype="multipart/form-data"> <textarea id="textarea" style="border-radius:0px; border:none; background-color:rgb(243,243,243); min-height:100px;"nam

我有一个简单的问题

我的聊天html中有一个表单:

<form action="../addchat.php" method="POST" enctype="multipart/form-data"> 
                    <textarea id="textarea" style="border-radius:0px; border:none; background-color:rgb(243,243,243); min-height:100px;"name="comment" rows="4" cols="50"></textarea><br>
                    <input height="25px" width="20px" style="float:right;" type="image" src="../arrow.png" name="submit" value="Comment">

</form>


此表单供用户提交聊天信息。然后,form post将信息定向到addchat.php,其中包含以下代码:

<?php
ob_start();
session_start();
include_once("config.php");



$reply=mysqli_real_escape_string($mysqli,$_POST['comment']);
$cid=mysqli_real_escape_string($mysqli,$_SESSION['cid']);
$uid=mysqli_real_escape_string($mysqli,$_SESSION['userid']);
$time=time();
$ip=$_SERVER['REMOTE_ADDR'];
$q= mysqli_query($mysqli,"INSERT INTO conversation_reply (user_id_fk,reply,ip,time,c_id_fk) VALUES ('$uid','$reply','$ip','$time','$cid')") or die(mysqli_error($mysqli)); 

?>

如果您不希望它重定向。将PHP代码移动到与表单相同的文件中。您可以使用
include
进行此操作。 然后制作表单
action=”“
。 然后在PHP中,您需要检查POST是否存在,以便它仅在表单提交时运行: e、 g


至于刷新问题。您可能需要研究AJAX,甚至。

标准html表单提交始终会提交(并重定向)到表单的
操作
属性中定义的页面。使用jquery,您可以防止这种默认行为,并使用ajax发送表单数据:

$("form").on("submit", function(event){
   event.preventDefault();
    $.ajax({
        url: "../addchat.php",
        type: "POST",
        cache: false,
        data: {
            comment: $("#textarea").text()
        },
        success: function(data){
            //something you could do on success of your ajax call.
            //you might not need it in this case.
        }
    });
});

其次,您需要一些自动刷新输出区域的过程。在html中创建一个div以显示聊天输出:

<div id="chat_content_div"></div>

在“chat_output.php”中,您只显示要在此分区中显示的数据库中的(html)数据。

回答这个问题并不简单,因为它属于您希望在聊天应用程序中显示的难度/复杂程度

  • 如果您不想在提交时得到重定向,可以使用AJAX发布表单
  • 如果您不想刷新页面来加载新的聊天消息,可以使用AJAX调用在一定时间间隔内获取新消息
  • 如果您希望在发送者发送的新聊天消息(与当前用户聊天),可以考虑使用NodeJS()或Socket.io()
  • 的推送服务器。
    如果我是你的话,我不会使用PHP来实现这个目的,或者如果你这样做了,你将需要大量的ajax来实现这个聊天

    要发送的ajax请求。。。ajax每n毫秒请求一次以获取新消息。您还应该使用api而不是网页与服务器端应用程序进行交互。您的服务器需要高度可用,并且响应速度非常快

    如果你想让这个聊天变得真正高效,你应该选择一种支持的语言(比如,看看java或其他什么语言)

    在写这些行的时候,我发现了一些()在php中使用websocket的东西(我不知道它是如何工作的,但是如果它与“While true”循环一起工作,您可能会遇到服务器的最大执行时间问题)


    编辑:正如Tuan Duong所建议的,nodejs是另一个很好的选择

    socket.io需要nodejs,尽管它需要。但这只是另一个选择。我推荐NoDEJS和SocketIO,这里是基本的聊天示例,它将涵盖基础知识,并且是你的聊天程序的主题。我在SocketIO和Node上做了一个检查,在我看来,它们更多的是用于群聊应用程序,而在我的例子中,我更关注的是私人聊天(比如Facebook),在这种情况下它还能工作吗?是的。你可以喜欢。。验证用户身份,将他们放入广播组(聊天室)或让他们直接相互交谈。node和php之间的主要区别在于,在node中,您始终可以访问所有连接。(您可以偷偷地将连接放入一个数组中,并对其进行迭代以广播消息)。。无论如何。。如果您确实想在php中执行此操作。。您可以增加时间,直到php挂断连接。只需休眠php脚本,直到有可用的数据(比如每秒从db请求新消息),然后响应ajax请求。出于私人目的,进行一次小型的私人聊天。简单的ajax聊天就足够了。WebSocket真的很难使用,特别是如果您对web编程完全陌生的话。这取决于他是否想自己做并学习一些东西,或者他当然只是想进行一次工作聊天。我想他想学习,如果不是,还有很多现成的php聊天工具。谢谢各位,我是javascript/ajax/jquery的初学者,我看过Node.Js,唯一担心的是我是否能够将它与我当前的php集成(这可能是一个问题),如果您是初学者,那么在这两种语言之间搭建桥梁可能有点棘手。也许您可以/应该在页面和服务器之间尝试ajax请求。但是,对于初学者来说,即使使用这种方法进行实时聊天也有点棘手,也许您可以使用一个现成的php聊天库,比如,或者我将对此进行测试,但其他人指出的一个问题是,使用php ajax的组合会使apache worker线程过载,所以我想我还是会坚持使用node.js。无论如何谢谢你!
    <div id="chat_content_div"></div>
    
    var refresh_time = 500; // chat refresh time in ms
    
    setInterval(function(){ 
        $.ajax({
            url: "chat_output.php",
            type: "GET",
            dataType: "html",
            cache: false,
            success: function(data){
                $("#chat_content_div").html(data);
            }
        });
    }, refresh_time);