利用NJet 持久化能力,为Web Server增加访问计数

NGINX 向云原生演进,All in OpenNJet 


在一些blog/文档网站中,常常需要增加一些访问留言、访问计数。由于很多网站是静态的,所以需要增加这些动态内容时有些挑战,常常需要在页面中埋点,增加对某些外部公共服务的引入。但实际上NJet具备数据的持久化能力,内置了高性能的KV存储。详见官网,基于这个特性,可以在不依赖任何外部系统(无论是公有云服务,还是企业额外部署的外部数据存储系统)的情况下,使得静态网站增加数据能力,变得动态化。下面就通过为NJet官网本身增加访问计数,来看下如何使用NJet的KV存储能力的。

NJet官网介绍

NJet官网是由hugo构建的静态网站,利用hugo,NJet的开发人员可以编写markdown格式的文件,hugo可以把该文件render成blog(hugo的使用请参考https://gohugo.io, 在此不在赘述)。总之,产生的页面如下图所显示,

img

为了对NJet网站的访问者的兴趣点有更好的关注,NJet的社区运维人员想在blog的页面中增加访问计数,比如在作者前面增加。修改目前的“BY {xxx} {date}” 为 “ reading count:{} BY {xxx} {date}”

1.1 修改前端展示:

NJet官网的blog页面模板为themes/universal/layouts/_default/single.html. 所以不需要逐个修改单独的页面,仅仅修改该页面就可以生效。因为我们要在作者前面增加访问计数,所以在该文件中,

{{ if isset .Params "authors" }}
                  {{ i18n "authorBy" }} {{ range $index, 
                  author := .Params.authors }}{{ if  index }}, {{ end }}<a href="{{ (printf "%s/%s" ("authors" | relLangURL) ($author |      
  urlize)) }}">{{ $author }}</a>{{ end }}

上述代码片段前增加:

{{ partial "partials/visit-counter.html" .  }}

并编写:themes/universal/layouts/partials/visit-counter.html,其内容为:

<b id="{{ .File.UniqueID }}" >visit-counter holder </b>
<script>
    var r = new XMLHttpRequest();
    r.addEventListener('load', function() {
        outTxt='reading count:'
        if (this.status== 200) {
            outTxt= outTxt+ parseInt(this.responseText)
        } else 
            outTxt= outTxt+ 'error'
        document.getElementById('{{ .File.UniqueID }}').innerText = outTxt
    })
    r.open('GET', '/counter/?page_id=' + {{ .File.UniqueID }} )
    r.send()
  </script>

这样前端内容就修改完成了。 注:以上的前端修改是基于hugo的某个特定主题的。 如果某个网站是维护的静态页面,则仅仅需要把以上的visit-counter的内容,嵌入到需要展示访问计数的地方。

1.2 后端配置:

•打开njet中lua的支持,在配置文件的主配置节添加:

load_module /usr/local/njet/modules/njt_http_lua_module.so;

•增加对/count的处理,在http->server块内增加location:counter,其内容如下:

location /counter {
     content_by_lua_block {
              local kv = require("njt.kv")
              local args, err = njt.req.get_uri_args()
              local key = args["page_id"]
          local counter=0;
              local rc,msg = kv.db_kv_get(key)
              if rc == 0 then
                 counter= msg
              end
        counter= counter+1
          kv.db_kv_set(key,counter)
          njt.say(counter)
      }
     }


以上代码中,根据传入的查询参数page_id, 更新NJet内置的KV存储中的对应内容,并返回更新的数据。在NJet重起后,可以通过curl http://yourwebsite/counter?page_id=xxx进行测试。可以看到每调用一次返回值从1开始,一直累加。

1.3 展示:

部署新的网站前端后,再次访问,可以看到如下的效果,访问计数展示出来了img

2. 参考

  • NJet kv lua接口,需要NJet2.0以上版本。
  • NJet kv能力相信介绍,请参考:官网
  • NJet 官网, 基于hugo universal主题构建,由NJet作为web server

NJet应用引擎是高性能、轻量级的WEB应用与代理软件。作为云原生服务网格的数据平面,NJet具备动态配置加载、主动式健康检测、集群高可用、声明式API等多种强大功能。通过CoPliot副驾驶服务框架,在隔离控制面和数据面的情况下实现了高可扩展性。NJet应用引擎助力企业实现云原生技术的平滑升级并大幅降低IT运营成本。 官网 邮件组 

优秀的个人博客,低调大师

微信关注我们

原文链接:https://my.oschina.net/u/6606114/blog/11047125

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。