我正在开发一个包含聊天系统的iOS应用程序(使用这些instructions)。 api在LAMP服务器上运行,因此我使用ReactPhp而不是Twisted作为套接字处理程序在客户端/服务器和服务器/客户端之间进行通信。
这是我用于 socket.php
文件的代码<?
require 'vendor/autoload.php';
$port = 1337;
$host = '127.0.0.1';
$app = function ($request, $response) {
$response->writeHead(200, array('Content-Type' => 'text/plain'));
$response->end('Hello '.time()."\n");
};
$loop = React\EventLoop\Factory::create();
$socket = new React\Socket\Server($loop);
$http = new React\Http\Server($socket, $loop);
$http->on('request', $app);
echo 'Server running at http://'.$host.':'.$port."\n";
$socket->listen($port, $host);
$loop->run();
?>
然后我在终端上运行它:
php socket.php
问题:
它工作正常,但是......如果我关闭终端(或者用ctrl + Z停止进程),端口就会停止监听。从Apache启动的那一刻起,我如何让套接字一直监听?
关闭终端(案例1)后,如果我再次尝试运行php socket.php
,我会收到以下消息:无法绑定到tcp://127.0.0.1:1337:已经是地址正在使用 - 如果该端口已被使用,那么为什么我在关闭终端后无法访问它?
答案 0 :(得分:0)
当您关闭终端会话时,您将终止该进程,除非将其作为守护程序运行。
Nohup救援!
来自维基百科:
nohup是一个忽略HUP(挂断)信号的POSIX命令。 HUP 按照惯例,信号是终端警告依赖过程的方式 注销。
通常发送到终端的输出将转到名为的文件 nohup.out,如果它还没有被重定向。
如果在基于Debian的系统(即Ubuntu)上:
sudo apt-get install nohup
如果在基于Fedora的系统(即Centos)上:
sudo yum install nohup
然后,像这样运行PHP脚本:
nohup php socket.php &
这将解决您的问题#1,这也将解决#2问题。
如果您刚刚作为守护程序启动的进程向stdout
写入任何内容,则可以通过从执行上述cat nohup.out
命令的文件夹中运行nohup php ...
来查看该内容。
答案 1 :(得分:-1)
lxml
输出:
ps -ef | grep php
杀死线程:
501 7286 3848 0 10:09AM ttys002 0:00.08 php socket.php
Nino的更新:
第二个问题也可以使用kill 7286
命令发生。