PHP 套接字 - 我需要什么来使用它们?

标签 php javascript mysql sockets

就在昨天,我问我的一个 friend ,他将如何通过 Web 服务器模拟两个客户端之间的直接通信 channel ,以创建聊天应用程序,但仅使用 PHP/MySQL/JavaScript。

他告诉我,最好的方法是使用 SOCKETS,直到那时我才听说过这个术语。今天早上,我开始研究它是为了创建我的聊天应用程序,但我很快开始相信它并不像我希望的那么容易。

所以我的问题是:如果我无法访问自己的服务器(我有一个托管在共享服务器上的域,我也将其用于测试目的),我仍然可以使用套接字来实现我的目标吗?如果是这样,具体是怎样的? (请理解我对这个想法完全陌生) 如果没有,还有什么其他方式来完成沟通 channel ? 到目前为止,我唯一的想法是简单地向存储应用程序的 Web 服务器发送定期请求 (AJAX),并请求任何新消息(如果有)。但这似乎不太可行。

预先感谢您的帮助!

最佳答案

我认为您的 friend 正在尝试为您的聊天网站实现 Comet。

假设他让您使用 PHP 套接字作为守护进程,我非常怀疑共享托管提供商会让您这样做。

您可以尝试挂起 PHP 脚本,直到有可用数据为止。然而,这会很快消耗基于 CGI 的服务器上的资源,因为 PHP 服务器无法判断客户端是否仍处于连接状态。我从经验中知道这一点。

对于这类事情,我强烈建议您购买专用服务器或 VPS 并将后端编写为 socket.io 之类的内容它会自动处理客户端和服务器端的所有通信问题。 PHP、MYSQL 和 fork 来服务请求的服务器通常是实现 Comet 的最坏情况,因为它们会产生相当多的开销并且不可扩展。

如果您无力运行自己的 Comet 服务器,那么轮询可能是您唯一的选择。这将是资源最密集且响应最慢的。

关于PHP 套接字 - 我需要什么来使用它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9044049/

相关文章:

javascript - 只有第一个按钮在下拉菜单中展开

javascript - 使用javascript中的add方法更新数组

javascript - 区分人类生成的事件和旧 IE 中生成的浏览器事件

MySQL 时间戳列 - 最后访问时自动更新(未修改)

php - 对两个表进行选择,结果允许访问这两个选定表的字段

php - 使用php将mysql表合并到一个表中

php - PHPMailer 中的多个图像附件

PHP array_search 函数不能正常处理返回值

javascript - 如何使用业务 api 获取所有谷歌评论

mysql - 如何将 Google Data Studio 与 VPC 后面的 AWS RDS MySQL 连接起来?