【发布时间】:2016-10-25 16:04:31
【问题描述】:
我已经编写了 server.php 以通过 tcp 套接字接受来自客户端的连接。 我用过
set_time_limit(0);
include_once("include/class.db.php");
while (true)
{
receive_message('x.x.x.x','8855',50);
}
function receive_message($ipServer,$portNumber,$nbSecondsIdle)
{
// creating the socket...
$socket = stream_socket_server('tcp://'.$ipServer.':'.$portNumber, $errno, $errstr);
if (!$socket)
{
echo "$errstr ($errno)<br />\n";
}
else
{
// while there is connection, i'll receive it... if I didn't receive a message within $nbSecondsIdle seconds, the following function will stop.
while ($conn = @stream_socket_accept($socket,$nbSecondsIdle))
{
$message= fread($conn, 1024);
if($message!=''){
echo 'I have received that : '.$message;
// insert into database
$sql = "insert into `data_log` (`id`,`message_text`) values (NULL,'$message')";
$query=mysql_query($sql) or die(mysql_error() . "<br>" . $sql);
}
fputs ($conn, "OK\n");
fclose ($conn);
}
fclose($socket);
}
}
然后我运行
nohup php server.php >/dev/null 2>&1 &
在后台运行服务器。一切正常。但是套接字在几个小时后自动关闭,或者说 php 脚本在几个小时后结束。因为我需要在后台运行脚本,直到我手动停止它。 可能是什么问题? 提前致谢
【问题讨论】:
-
好吧 - 您可以通过将程序输出管道传输到日志文件而不是 /dev/null 来开始故障排除。作为初步措施,您可以编写一个 cronjob 不时检查您的脚本是否仍在运行,如果没有,则重新启动它。
-
可能在一段时间后数据库连接关闭并且脚本执行停止,或者您的内存不足。请首先检查您的连接。
-
@FranzGleichmann 使用文件而不是 /dev/null 在一天内创建了一个大约 20gb 的大文件。所以我使用 /dev/null
-
然后消除所有不必要的输出,这样您就会得到错误消息。
-
@FranzGleichmann 我已将输出通过管道传输到日志文件,现在我将在脚本终止后返回日志报告。