4

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

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

以及间隔如何。通常在 C#.NET exe 应用程序中,我只会创建一个计时器。这怎么能在 PHP 中完成?

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

4

1 回答 1

5

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

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

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

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

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

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

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

于 2012-03-16T15:44:18.503 回答