PHP服务器和websockets

时间:2012-03-16 15:06:12

标签: php websocket phpwebsocket

我想开始使用websockets建立与PHP套接字服务器的连接。如果数据库中的某些内容发生了变化,该服务器应该以一定的间隔进行检查,然后它应该将更改发送回客户端。因此,当连接客户端时,只要客户端(本例中为webbrowser)在页面上,连接就应该保持打开状态。

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

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

如果这一切都可能,我只需在Apache网络服务器中运行我的PHP代码吗?

1 个答案:

答案 0 :(得分:5)

通常,如果您要在PHP中编写套接字服务器,则需要通过命令行运行它。您需要考虑的事项是:

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

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

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

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

在所有名为socket.io的浏览器上都没有支持套接字的解决方案。基本上我相信它会尝试设置一个浏览器websocket,如果它支持,但如果它不受支持,它会启动一个Flash套接字连接。无论哪种方式,您都可以使用相同的界面与其进行交互。

您可能还想考虑另一种语言来创建套接字服务器。 PHP并不是真的为这类东西而构建。使用的更好的语言是Javascript,特别是如果可扩展性是一个问题。 Node.js是一个允许您轻松构建套接字服务器的库,并且可以更具可伸缩性。