【问题标题】:PHP Sockets or Python, Perl, Bash Sockets?PHP 套接字还是 Python、Perl、Bash 套接字?
【发布时间】:2010-11-06 02:06:02
【问题描述】:

我正在尝试实现将在大多数共享 PHP 主机中运行的套接字服务器。

要求是可以从 PHP 自动安装、启动和停止 Socket 服务器,而无需用户做任何事情。套接字服务器用什么语言编写并不重要,只要它能够在全球大多数共享主机上运行即可。

目前,我用 PHP 编写了一个实现对象缓存的 Socket 服务器: http://code.google.com/p/php-object-cache/

来源:http://code.google.com/p/php-object-cache/source/browse/trunk/socket.class.php

然而,PHP 必须在编译时支持套接字,并且运行 PHP 套接字支持的服务器并不多。

我真正的问题是:我应该用什么语言来实现套接字服务器,并且具有最大的平台支持并且可以从 PHP 中调用。

换句话说,哪种脚本语言在启用 PHP 的服务器上最常见?

或者我是否必须用编译语言编写套接字服务器才能使其在所有服务器上工作?

我们暂时不考虑 IIS,只考虑 Linux 服务器。我认为没有多少 PHP 站点在 IIS 上运行...


编辑:

抱歉,我认为我的问题不清楚。

我想知道,考虑到以下要求,哪种语言最适合创建套接字服务器:

该语言必须与在 Apache(而非 CLI)中运行的 PHP 一起存在于共享主机中。 必须在本机启用套接字支持,而不是通过所需的扩展。 PHP 必须能够将守护程序写入文件以及启动和停止守护程序。

我不是在为单个服务器寻求解决方案。它必须在大多数共享托管服务器上本地运行。

【问题讨论】:

  • 为什么要从 PHP 调用它?服务器通常不会被邀请,而是一直作为守护进程运行。
  • 我不知道“多少”是多少,但我有一个主要提供商的托管,它是 IIS,并且有很好的 PHP 支持。
  • 我需要一个 Web 界面来启动套接字服务器,因此它应该能够从 PHP 中启动和停止。它也需要通过 PHP 安装。
  • 大多数共享主机服务器会强制终止任何运行时间过长的进程,并且需要在后台运行一个套接字服务器来接受连接。您的请求基本上是不可能的,因为它违反了整个共享托管业务模式。

标签: php python perl bash sockets


【解决方案1】:

任何服务器都可以在 Linux 下通过 PHP 来停止或启动。当然,如果您正在运行一个接受来自互联网的套接字的服务器,那么您可以直接连接到服务器并告诉它关闭。无需通过PHP!

至于“从 PHP 启动服务器”,好吧,在 Linux 下,任何东西都可以从几乎任何东西开始。只需启动进程并让它进入守护程序模式即可。

我自己是 Perl 的粉丝。不出所料,有 Perl Daemon library available.

如果您的托管服务提供商提供 Perl 脚本支持,那么您可能有权使用“系统”或反引号 command。然后你很可能会启动一个守护进程。但是,您将需要使用非特权端口(超过 1024)。另外,你应该先问他们!他们可能不喜欢你在他们的服务器上绑定端口。这绝对是您应该与您的托管服务提供商讨论的问题。

【讨论】:

  • +1 用于提及 Perl::Daemon。同意 OP 在编写代码之前需要与托管服务提供商讨论,但我认为它与通用提供商服务一起工作的要求“有味道”。
【解决方案2】:

这实际上取决于安装要求。编写套接字服务器的最简单和最标准的方法通常是编写inet.d service。这是我的 unix 机器上的标准守护进程,它将派生一个进程并处理套接字级别的详细信息。如果您希望您的服务在 Unix 上低于 1024 的端口上运行,这是完成它的更简单方法之一。但是,初始安装需要 root 才能配置 inet.d。

如果您的共享主机允许 PHP 执行 exec 调用,那么您可以以这种方式启动守护进程。但请记住,它需要在端口 1024 以上运行。接下来您需要决定您的程序是多线程还是多进程。 Java 程序通常是多线程的,而 Apache 实例通常是多进程的。

最后,主机可能有防火墙。这有助于防止共享主机帐户成为僵尸网络的一部分。如果防火墙规则不允许连接到其他端口,您将无法远程连接到它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-07
    • 2014-11-05
    • 2011-08-11
    相关资源
    最近更新 更多