2012-03-16 103 views
4

我想开始使用websockets连接到一个PHP套接字服务器。这个服务器应该以特定的时间间隔检查数据库中是否发生了变化,然后应该将更改发送回客户端。所以当客户端连接时,只要客户端(在这种情况下是网页浏览器)在页面上,连接应该保持打开状态。PHP服务器和websockets

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

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

如果这是所有可能的,我可以只是简单地运行我的PHP代码在Apache网络服务器?

+0

websocket是一个不同的协议,所以没有你不能通过Apache运行它。显然有https://github.com/disconnect/apache-websocket – miki 2012-03-16 15:29:48

回答

5

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

您需要访问套接字,通常您不需要访问共享服务器,因此您必须去获取VPS。

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

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

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

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

您也可能想要考虑另一种语言来创建您的套接字服务器。 PHP并不是真正为这种类型构建的。使用更好的语言是Javascript,特别是如果可扩展性是一个问题。 Node.js是一个库,可以让你很容易地构建套接字服务器,并且可扩展性更高。

+0

在我的情况下,数据库是必须的。我没有将所有内容都存储在数据库中,只是一些设置。当一个用户更改设置时,则必须尽快通知其他用户。所以当我需要一个数据库时,我不认为nodejs是我的选择。但是在命令行中运行php服务器听起来对我来说已经足够了。我现在来看看 – w00 2012-03-16 15:55:35

+0

node.js内置了MySql和Drizzle驱动程序的数据库访问。如果必须立即通知其他用户,为何将其存储在数据库中?为什么不在一个用户向您发送消息时立即将该信息发送给其他用户?套接字服务器不像Web脚本。有一个脚本运行的实例,所有连接的用户都在使用它。这意味着用户可以共享变量内的数据,即时传递其他消息等。 – dqhendricks 2012-03-16 16:16:56

+0

http://nodejsdb.org/ – dqhendricks 2012-03-16 16:18:49