您现在的位置是:首页 > 文章详情

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

日期:2024-03-13点击:189

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业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章