09月22, 2017

leancloud 应用不休眠办法

通过Leancloud的云引擎可以简单部署我们的程序,而不需要我们自己的服务器,但是免费版会有休眠时间,本文介绍让Leancloud云引擎不休眠的办法。

简介

Leancloud是国内领先的 BaaS 提供商,为移动开发提供强有力的后端支持。 通过Leancloud提供的云引擎,我们可以简单的部署我们的程序,而不需要关心运维和服务器的情况。

问题描述

根据其文档(leancloud文档)所述

  • 如果应用最近一段时间(半小时)没有任何外部请求,则休眠
  • 休眠后如果有新的外部请求实例则马上启动。访问者的体验是第一个请求响应时间是 2 ~ 10 秒(视实例启动时间而定),后续访问响应速度恢复正常。
  • 强制休眠:如果最近 24 小时内累计运行超过 18 小时,则强制休眠。此时新的请求会收到 503 的错误响应码,该错误可在 云引擎 > 统计 > Status 页面 中查看。

因为我们使用的是免费的云引擎,所以当网站或应用在半个小时内没有人访问的时候,Leancloud会将我们的应用休眠,当有外部请求的时候再恢复。 虽然时间不长,但对用户的体验不够好。 所以我们需要一个策略来定期访问的应用,防止它休眠。

解决方法

我的云引擎上面部署的是一个api接口服务,用于给我的微信小程序提供支持。

之所以将服务部署到Leancloud上,而不是云服务器上,是因为Leancloud的云引擎在部署之后会提供一个https的备案过的二级域名。

由于我的身份证用于公司网站的备案了,国内规定一个身份证只能给一个网站备案,导致我的域名没办法备案。而微信小程序规定只能使用https的备案的域名,所以只能选择Leancloud的云引擎来提供服务了。

我的解决方法是通过定时任务定期是访问的我的服务,让Leancloud不休眠应用。

下面贴出我的代码:

<?php
date_default_timezone_set('Asia/Shanghai');

$hour = date("H");

//每天00:00 -- 06:00 休眠应用
if($hour >= '00' && $hour <='06'){
    die('休眠时间');
}

//换成你leancloud配置的域名
$url = 'https://guan.leanapp.cn/';

$result = file_get_contents($url);

var_dump($result);

将上面的文件保存成leanCrontab.php文件,上传到服务器上。

在服务器上执行

php leanCrontab.php

可以看到输出部署在leancloud上的应用的信息,如我的就是

hello

接着配置linux服务器的定时任务

在ssh终端上输入

crontab -e

进入crontab编辑界面

crontab格式如下

  • 第1列分钟1~59
  • 第2列小时1~23(0表示子夜)
  • 第3列日1~31
  • 第4列月1~12
  • 第5列星期0~6(0表示星期天)
  • 第6列要运行的命令

由于Leancloud是每半小时没有访问时休眠,所以我们的脚本需要每二十分钟启动一次。

脚本如下:

20 * * * * *

接着需要添加执行的命令

php /path/leanCrontab.php

其中,path是leanCrontab.php这个文件的路径。

完整的配置如下:

20 * * * * *  php /path/leanCrontab.php

用:wq来保存退出,同vim一样。

之后脚本就会在后台定时执行了。我们的应用就不会休眠了。

后记

当然,我这种方法不具备通用性,毕竟有服务器了,干嘛还用leancloud来搭建网站。

但我这是在不备案的情况下能找到的最好的解决方法了。

当然了,如果你有这方面的需求,给我发邮件或者留言,我可以在我的服务器上给你添加上定时任务,欢迎给我发邮件。

我的邮箱地址: guansixu#vip.qq.com

本文链接:http://blog.guansixu.cn/post/leancloud-not-sleep.html

-- EOF --

Comments