利用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, 在此不在赘述)。总之,产生的页面如下图所显示,
为了对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 展示:
部署新的网站前端后,再次访问,可以看到如下的效果,访问计数展示出来了
2. 参考
- NJet kv lua接口,需要NJet2.0以上版本。
- NJet kv能力相信介绍,请参考:官网
- NJet 官网, 基于hugo universal主题构建,由NJet作为web server
NJet应用引擎是高性能、轻量级的WEB应用与代理软件。作为云原生服务网格的数据平面,NJet具备动态配置加载、主动式健康检测、集群高可用、声明式API等多种强大功能。通过CoPliot副驾驶服务框架,在隔离控制面和数据面的情况下实现了高可扩展性。NJet应用引擎助力企业实现云原生技术的平滑升级并大幅降低IT运营成本。 官网 邮件组

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
得物布局构建耗时优化方案实践
一、背景 当谈到移动应用程序的体验时,页面启动速度是其中至关重要的一点,更快的页面展示速度确保应用程序可以迅速加载并响应用户的操作, 从而提高用户使用 App 时的满意度。在页面启动的整个流程中,随着 UI 复杂度的上升,布局的 Inflate 耗时占据了相当一部分关键的比例,本文分享得物自身在页面布局构建耗时优化方案上的探索历程。 二、现有方案 在布局构建耗时优化上,开源社区上有一些现成的方案可供参考,我们首先看下目前一些已知的技术方案。 掌阅X2C 掌阅的 X2C 方案开源于 2018 年,其通过 APT 在编译期间对目标 XML 文件进行解析,并翻译成 XML View 树结构对应的 Java 文件。比如以下的布局 XML 文件。 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" ...
- 下一篇
EasyGoAdmin 敏捷开发框架 Beego+AntdVue 版本 v2.5.0 发布
v2.5.0 更新内容:1、go.mod 依赖管理导入 Excel 操作类依赖;2、新增职级管理导出 Excel 数据的功能;3、新增职级管理导入 Excel 模板文件;4、新增职级管理导入 Excel 数据的功能;5、新增职级管理导入、导出和下载模板的路由;6、修复近期用户使用过程中反馈的 BUG; 项目介绍 一款 Go 语言基于 Beego、Vue3、AntDesign、MySQL 等框架精心打造的一款模块化、插件化、高性能的前后端分离架构敏捷开发框架,可快速搭建前后端分离后台管理系统,本着简化开发、提升开发效率的初衷,框架自研了一套个性化的组件,实现了可插拔的组件式开发方式,同时为了敏捷快速开发,框架特地集成了代码生成器,完全自主研发了自定义 GO 后端服务模板和前端 Vue 自定义模板,可以根据已建好的表结构,可以快速的一键生成整个模块的所有代码和增删改查等等功能业务,真正实现了低代码开发方式,极大的节省了人力成本的同时提高了开发效率,缩短了研发周期,是一款真正意义上实现组件化、可插拔式的敏捷开发框架。 内置模块 用户管理:用于维护管理系统的用户,常规信息的维护与账号设置。 角...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Docker安装Oracle12C,快速搭建Oracle学习环境