【问题标题】:PHP server and websocketsPHP 服务器和 websockets
【发布时间】:2023-03-22 01:00:01
【问题描述】:

我想开始使用 websockets 连接到 PHP 套接字服务器。该服务器应每隔一定时间检查数据库中是否发生了更改,然后将更改发送回客户端。因此,当客户端连接时,只要客户端(本例中的网络浏览器)在页面上,连接就应该保持打开状态。

然后服务器应该在一定的时间间隔检查数据库并在需要时发回数据。我知道问题不在于 websockets(除了并非所有主要浏览器都支持它)。我主要关心的是PHP。我想在 PHP 中创建服务器,但我可以一直保持与 PHP 代码的连接吗?

那么间隔呢。通常在 C#.NET exe 应用程序中,我只会创建一个计时器。用 PHP 怎么可能做到这一点?

如果这一切都是可能的,我可以简单地在 Apache 网络服务器中运行我的 PHP 代码吗?

【问题讨论】:

标签: php websocket phpwebsocket


【解决方案1】:

通常,如果您要使用 PHP 编写套接字服务器,您会希望通过命令行运行它。您需要考虑的事项是:

您需要访问套接字,而共享服务器上通常不需要,因此您必须自己购买一个 VPS。

您可能希望在服务器上设置一个文件,该文件将在每次重新启动服务器时自动启动您的 PHP 脚本。通常这是通过在 /etc/init.d 中放置一个运行 PHP 脚本的 shell 脚本,然后在 /etc/rc5.d 中放置一个指向 shell 脚本的符号链接来完成的(假设这是您的默认级别)。

您也很可能不希望/不需要运行 Apache,除非您还计划将此服务器用作文件服务器。如果您仅将它用于套接字服务器,则需要安装 PHP-CLI。这将节省您的内存。

如果您尝试在连接到服务器的用户之间进行实时交互,您可能根本不想涉及数据库。您的套接字服务器将拥有连接到套接字服务器的所有订阅者的列表,因此当其中一个向您发送消息时,您可以立即将该消息发送回所有连接的订阅者,而无需将任何内容存储在慢速数据库中。或者,如果您负担得起,您可能希望将信息保存在内存中。

对于并非所有浏览器都支持套接字的解决方案,称为 socket.io。基本上我相信如果支持它,它会尝试设置浏览器 websocket,但如果不支持,它会启动 Flash 套接字连接。无论哪种方式,您都使用相同的界面与之交互。

您可能还需要考虑另一种语言来创建您的套接字服务器。 PHP 并不是真正为这种类型的东西而构建的。更好的语言是 Javascript,尤其是在可扩展性受到关注的情况下。 Node.js 是一个库,可以让您非常轻松地构建套接字服务器,并且具有更高的可扩展性。

【讨论】:

  • 就我而言,数据库是必须的。我没有将所有内容都存储在数据库中,而只是一些设置。当一个用户更改设置时,必须尽快通知另一个用户。因此,当我需要数据库时,我认为 nodejs 不是我的选择。但是在命令行中运行 php 服务器对我来说已经足够好了。我现在就去看看
  • node.js 内置了数据库访问,带有 MySql 和 Drizzle 的驱动程序。如果必须立即通知其他用户,为什么要将其存储在数据库中?为什么不在一个用户向您发送消息后立即将该信息发送给其他用户。套接字服务器不像 Web 脚本。该脚本的一个实例始终在运行,所有连接的用户都在使用该实例。这意味着用户可以在变量内部共享数据、即时相互传递消息等。
猜你喜欢
  • 2014-10-09
  • 1970-01-01
  • 2012-10-11
  • 2016-10-03
  • 1970-01-01
  • 2014-12-30
  • 2012-08-14
  • 2013-01-08
相关资源
最近更新 更多