PHP服务器和WebSocket

PHP服务器和WebSocket,php,websocket,phpwebsocket,Php,Websocket,Phpwebsocket,我想开始使用WebSocket连接到PHP套接字服务器。该服务器应每隔一定时间检查数据库中是否有更改,然后将更改发送回客户端。因此,当客户端连接时,只要客户端(本例中的webbrowser)在页面上,连接就应该保持打开状态 然后,服务器应该每隔一段时间检查数据库,并在需要时发送数据。我知道问题不在于websockets(除了还不是所有主流浏览器都支持它)。我主要关心的是PHP。我想用PHP创建服务器,但是我可以让一个PHP代码的连接保持打开状态吗 间隔时间呢。通常在C#.NET exe应用程序中

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

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

间隔时间呢。通常在C#.NET exe应用程序中,我只会创建一个计时器。如何在PHP中实现这一点


如果这一切都是可能的,我能在Apache Web服务器上运行PHP代码吗?

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

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

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

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

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

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


您可能还想考虑另一种语言来创建套接字服务器。PHP并不是为这种类型的东西而构建的。更好的语言应该是Javascript,特别是在考虑可伸缩性的情况下。Node.js是一个库,它允许您非常轻松地构建套接字服务器,并且具有更高的可扩展性。

websocket是一个不同的协议,因此您不能通过apache运行它。显然,在我的情况下,数据库是必须的。我不是把所有的东西都存储在数据库中,只是一些设置。当一个用户更改设置时,必须尽快通知另一个用户。所以当我需要数据库时,我不认为nodejs是我的选择。但是在命令行中运行php服务器对我来说已经足够好了。我将研究一下node.js内置的数据库访问,以及MySql和Drizzle的驱动程序。如果必须立即通知其他用户,为什么要将其存储在数据库中?为什么不在一个用户向您发送消息后立即将该信息发送给其他用户呢。套接字服务器与web脚本不同。始终有一个脚本实例在运行,所有连接的用户都在使用它。这意味着用户可以共享变量内部的数据,即时传递消息等。