Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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
如何构建PHP/MySQL实时聊天?_Php_Mysql - Fatal编程技术网

如何构建PHP/MySQL实时聊天?

如何构建PHP/MySQL实时聊天?,php,mysql,Php,Mysql,我想学习如何从头开始制作这些系统,我发现谷歌上有很多垃圾链接。我真的只想要一个最基本的PHP和MySQL聊天的简单教程,这样我就可以在开始使用jQuery/AJAX之前理解这个概念。一个非常简单的起点 为消息创建一个数据库表 id | user | timestamp | message 还有一个PHP页面,该页面发送AJAX请求以读取任何新消息 这将涉及检查数据库,以查看自收到请求以来是否有任何消息。如果没有消息,则循环,等待并在100毫秒后重试(或任何您认为可以接受的延迟) 当Ajax请求

我想学习如何从头开始制作这些系统,我发现谷歌上有很多垃圾链接。我真的只想要一个最基本的PHP和MySQL聊天的简单教程,这样我就可以在开始使用jQuery/AJAX之前理解这个概念。

一个非常简单的起点

为消息创建一个数据库表

id | user | timestamp | message
还有一个PHP页面,该页面发送AJAX请求以读取任何新消息

这将涉及检查数据库,以查看自收到请求以来是否有任何消息。如果没有消息,则循环,等待并在100毫秒后重试(或任何您认为可以接受的延迟)


当Ajax请求返回消息(最好是JSON响应)时,使用JQuery将用户、时间和消息输出到页面。

聊天的实时部分是棘手的部分,如果您刚刚开始,我将跳过这一部分。 首先构建一个简单的留言簿,然后添加更多功能

有很多关于如何构建留言簿的教程,甚至还有一些免费的脚本供您学习

在您的留言簿正常工作后,您可以添加一些功能,例如使用AJAX轮询自动加载新消息,使其显示为实时消息。您的基本工作是定期向服务器发出AJAX调用,以获取所有消息并将其显示在页面上。

PHP/MySQL聊天101:

1) 用户打开一个
2) 用户进入浏览器
3) 浏览器发送请求
4) 接收HTTP请求
5) 服务器告诉PHP解释器运行
6) PHP脚本到
7) PHP脚本
8) PHP生成由HTML代码和消息组成的HTTP响应
9) 服务器向浏览器发送HTTP响应
10) 浏览器从HTTP响应中提取HTML
11) 用户键入新消息并提交表单
12) 浏览器发送HTTP POST请求

13) ...

在这里找到了非常有趣的教程


如果您必须使用php和mySQL进行聊天,至少有一个单独的未读邮件表。如果您进行投票,您很可能需要每隔100毫秒左右检查一次数据库中的新消息。如果消息表的总行数为1000行,则每100ms检查一次将杀死服务器(特别是在连接了许多用户的情况下)。我会用一个只包含未读消息的表来构建mySQL数据库,一旦读到旧消息,我会将它们移动到一个更大的表中。这样你就不会一直盯着一张大桌子了

更好的方法是使用缓存数据库来存储未读消息,比如redis(facebook使用memcacheD)


更好的方法是不要同时使用php,而是使用事件驱动的语言和node.js之类的回调函数,我认为这个问题有点含糊不清——如果您将注意力更多地集中在您关心的特定方面,可能会有所帮助。你没有说你在PHP、数据库设计等方面的专业水平是什么,那么你想要什么级别的教程呢?frames+
meta refresh
是AJAX之前的方式,这是一个多么模糊的问题。如果你在项目的某个特定部分寻求帮助,而不仅仅是在整个项目上寻求教学,你可能会更幸运。你喜欢这样吗?可能是我刚刚编写的第一个ajax应用程序的副本,所以对它来说还是非常新的。可以从浏览器进行轮询吗?这不会导致cpu利用率过高等问题吗?您可以从浏览器进行轮询,让服务器循环,直到找到新消息,然后返回响应。这就是所谓的长轮询(longpolling),是解决web编程中套接字需求的少数几种方法之一,但是操作符部分呢?必须有一个操作员(管理员)来处理传入的客户消息并对其作出响应,对吗?所以,如果我理解正确,管理员端的脚本将不断检查数据库中的最新条目(每隔一定时间,比如说每10秒,使用ajax),并向管理员显示消息的详细信息和相应的客户。因此管理员可以选择客户并向其发送响应。然后在客户端,我们必须显示针对该客户的消息(再次定期)。虽然这在理论上可以回答问题,但在此处包括答案的基本部分,并提供链接以供参考。这不会是实时的