php - 两个登录用户之间的实时响应

标签 php javascript mysql

我是PHP/MySQL的初学者,也是javascript新手,我想创建一个页面,一个用户可以向另一个用户发送实时请求。例如,用户a可以看到在线用户的列表,并向用户B发送请求(在线),用户B的页面将显示弹出式警报,用户B可以选择单击“是”或“否”。用户a将收到带有B响应的弹出式消息(或者如果超时,则默认为“否”)
这通常是怎么做的?我想我的问题有两部分:
如何记录在线/离线用户?(我要一张桌子吗
记录登录/注销时间?)
通常如何发送消息
两个用户之间

最佳答案

我不知道你想说什么,但我想私下聊聊是个好例子?我会假装那就是你在做的。
我会尽量在适当的地方提供大量的信息,而不会把它变成一个完整的教程。期待大量的链接和建议来阅读文章。
这个想法
你的应用程序的核心有一个基本思想,用户通信。您需要以某种方式从无状态的、异步的HTTP世界转到有状态的、同步的世界。有几种方法可以做到这一点。
轮询
这是使用AJAX从服务器重复请求信息。AJAX代表异步Javascript和XML,但不要担心XML,这只是历史。基本上,AJAX就像在浏览器中从脚本发出一个常规请求一样,这使您能够在不刷新的情况下从服务器发送和接收数据。这对于用户发起或可以处理延迟的情况很好。对于您的案例,您将标记某人最后一次执行操作的时间,然后指定一些超时时间来决定某人何时脱机。请求的结果包含自检查后可能已到达的任何新消息。
长轮询/彗星
这是以前轮询思想的扩展。这几乎是基本AJAX的客户端启动特性的一个解决方案。Comet本质上只是AJAX,但是您将连接保持打开的时间要长得多,从而允许服务器向下推送信息。你可以在这里找到关于这项技术的信息:Comet。但是,这种技术存在一些问题:
断断续续的经历。不同的浏览器将以不同的方式处理长时间打开的连接,这使得在所有浏览器中为所有用户提供一致的体验成为一项挑战。
断开连接。最终会出现脱节。最后,浏览器根据请求调用.abort(),您必须重新打开它。
单一连接限制。HTTP/1.1标准规定,一个浏览器在每台服务器上只能同时打开一个连接。您可以通过使用多个(子)域来解决这个问题。
您必须使用与以前基本相同的技术,因为您仍然有断开连接,这是正常使用的一部分。不同的是,服务器必须在必要时保持连接打开。取决于您在后端使用的技术,这可能是从琐碎到困难的任何地方,如果不小心处理,可能会造成很大的性能成本。
WebSockets网站
WebSockets基本上是以前的解决方案,但标准化并正确实施。WebSockets的本质是,您可以向服务器发出常规请求,但要求将其升级为TCP连接。这里的upgrade这个词有点误导人,因为从技术上讲,它只是从连接中删除HTTP内容,留给您原始的底层连接。
WebSockets是为持久连接而设计的,是全双工的(双向通信)。
然而,有两个主要的缺点:它们是新的,这意味着支持并没有那么广泛,大多数现代浏览器都支持它们,但是你不能指望每个人都有一个最新的浏览器。需要服务器端支持。这意味着您必须拥有一个能够升级请求并有效处理它们的系统,同样,因为这是一项新技术,支持是有限的,而socket.io是主要的支持。socket.io是node.js模块,因此可能不适合您。其他语言/技术也在那里,但支持率明显下降。
(编辑:重新阅读您的问题,并看到您正在使用PHP,您可以使用这个库:php-websocket的websockets。我已经测试过了,所以请清空)
使用WebSockets,您可以使用连接断开作为脱机信号,只需根据需要发送数据。然而,如果WebSockets不可用,那么明智的做法是回到一个更老、更可靠的解决方案,所以请记住这一点。
围绕所有这些解决方案仍有许多问题需要解决,但希望这能让您了解从何处开始以及如何开始。至少它提供了一些你可以用谷歌搜索的短语(或者bing或者duckduckgo或者ask)!

关于php - 两个登录用户之间的实时响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13302772/

相关文章:

php - 强制唯一规则忽略给定 ID

PHP、MySQL、jQuery、AJAX : json data returns correct response but frontend returns error

javascript - Node js 上的 Cheerio 出错

javascript - 使用 JavaScript 将一个输入的值复制到多个输入

javascript - 如何使用 Javascript 根据元素的颜色更改 ID

php - 将 JSON 数组从 Android 应用程序发送到 PHP

php - 脚本和样式未在 wordpress 中加载

javascript - Cakephp 图像未显示在 view.ctp 中

MySQL 行中的最大值

mysql - 找不到数据库表 cakephp