PHP 套接字还是 Python、Perl、Bash 套接字?

3 投票
2 回答
2557 浏览
提问于 2025-04-15 12:30

我正在尝试实现一个可以在大多数共享PHP主机上运行的套接字服务器。

这个套接字服务器的要求是:它可以从PHP自动安装、启动和停止,用户不需要做任何事情。套接字服务器用什么语言写都没关系,只要它能在全球大多数共享主机上运行就行。

目前,我用PHP写了一个套接字服务器,它实现了一个对象缓存: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中运行的PHP一起使用(而不是CLI)。

套接字支持必须是原生启用的,而不是通过需要的扩展来实现。

PHP必须能够将守护进程写入文件,并且能够启动和停止这个守护进程。

我并不是在寻找单个服务器的解决方案。它必须能够在大多数共享主机服务器上原生运行。

2 个回答

7

在Linux系统下,任何服务器都可以通过PHP来启动或停止。当然,如果你运行的是一个可以接受互联网连接的服务器,你可以直接连接到这个服务器,然后告诉它关机。根本不需要通过PHP来操作!

至于“从PHP启动服务器”,在Linux下,几乎任何东西都可以从任何地方启动。你只需要通过命令行启动这个进程,然后让它进入守护进程模式。

我自己是个Perl的粉丝。不出所料,有一个Perl守护进程库可以使用。

如果你的主机服务提供商支持Perl脚本,那么你可能有权限使用“system”命令或者反引号command。这样你很可能就能启动一个守护进程。不过,你需要使用一个非特权端口(大于1024)。另外,你最好先问问他们!他们可能不喜欢你占用他们服务器上的端口。这绝对是你应该和你的主机服务提供商讨论的事情。

2

这其实要看你的安装需求是什么。通常,写一个套接字服务器最简单、最标准的方法就是创建一个inet.d 服务。这个服务在我的Unix机器上是个标准的守护进程,它会分叉出一个进程来处理套接字的细节。如果你想让你的服务在Unix上运行在1024以下的端口,这是一种比较简单的方法。不过,最开始的安装需要管理员权限来配置inet.d。

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

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

撰写回答