PHP服务器和WebSockets

4
我想开始使用Websockets与PHP套接字服务器建立连接。此服务器应在特定间隔内检查数据库是否有更改,然后将更改发送回客户端。因此,当客户端连接时,连接应该保持打开状态,只要客户端(在这种情况下是Web浏览器)在页面上。
然后,服务器应定期检查数据库并在需要时发送数据。我知道问题不在Websockets上(除了不是所有主要浏览器都支持它)。主要关注的是PHP。我想用PHP创建服务器,但是我可以保持与PHP代码的连接时间长达多久吗?
还有间隔怎么办。通常,在C#.NET exe应用程序中,我只会创建一个计时器。在PHP中该如何实现?
如果这一切都可行,我能否简单地在Apache Web服务器中运行我的PHP代码?

WebSocket是一种不同的协议,因此您不能通过Apache运行它。显然有https://github.com/disconnect/apache-websocket。 - miki
1个回答

5
通常情况下,如果您想在PHP中编写套接字服务器,您需要通过命令行运行它。您需要考虑以下问题:
您需要访问套接字,通常在共享服务器上您没有这个权限,因此您需要获取一个VPS。
您需要在服务器上设置一个文件,每次服务器重新启动时自动启动您的PHP脚本。通常,您可以通过将运行PHP脚本的shell脚本放置在/ etc / init.d中,然后在/ etc / rc5.d中放置对shell脚本的符号链接来完成此操作(假设这是默认级别)。
除非您还计划将此服务器用作文件服务器,否则您也不太可能需要Apache。如果只用于套接字服务器,您需要安装PHP-CLI。这将为您节省内存。
如果您尝试在连接到服务器的用户之间进行实时交互,则可能根本不希望涉及数据库。您的套接字服务器将具有所有订阅者的列表,因此当其中一个发送消息时,您可以立即将该消息发送回所有已连接的订阅者,而无需在缓慢的数据库中存储任何信息。或者,如果可以负担得起,您可以将信息保存在内存中。
对于不支持所有浏览器的套接字,还有一种解决方案称为socket.io。基本上,我认为它会尝试设置浏览器websocket(如果受支持),但如果不受支持,则会启动Flash套接字连接。无论哪种方式,您都可以使用相同的界面与其交互。
您还可能希望考虑使用另一种语言来创建套接字服务器。 PHP并不是为此类事情而构建的。更好的语言是JavaScript,特别是如果可扩展性是一个问题。 Node.js是一个库,允许您轻松构建套接字服务器,并且更具可扩展性。

在我的情况下,数据库是必不可少的。我并不是把所有的东西都存储在数据库中,只存一些设置。当一个用户更改了某个设置时,其他用户必须尽快收到通知。所以我认为当我需要数据库时,nodejs 不是一个选项。但是在命令行中运行 php 服务器对我来说已经足够好了。我现在会去看一下这个。 - w00
Node.js内置了MySql和Drizzle的数据库访问驱动程序。如果其他用户必须立即得到通知,为什么要将其存储在数据库中?为什么不在一个用户发送消息时立即将该信息发送给其他用户。Socket服务器不像Web脚本。脚本始终运行一个实例,所有连接的用户都在使用它。这意味着用户可以在变量中共享数据,即时传递彼此的消息等。 - dqhendricks

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接