浏览 253 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
|
发表时间:2023-12-25
学习地址2:https://share.weiyun.com/xnelqdhp 密码:bdmum6 今天我将给大家讲解基于c 的linux高性能事件驱动网络编程框架的设计方法及技巧,我在文中采取渐进迭代的方式,配合c 11新特性的使用,以及网络编程理论的深度讲解,并手把手带着大家落地实现,助力在网络编程领域有更大的技术提升! linux系统的性能是指操作系统完成任务的有效性、稳定性和响应速度。linux系统管理员可能经常会遇到系统不稳定、响应速度慢等问题,例如在linux上搭建了一个web服务,经常出现网页无法打开、打开速度慢等现象,而遇到这些问题,就有人会抱怨linux系统不好,其实这些都是表面现象。 linux 提供三个「点分十进制字符串表示的 ipv4 地址和用网络字节序整数表示的 ipv4 地址之间转换」的接口 public gracejsonresult dologin(httpservletrequest request, httpservletresponse response, registerloginbo registerloginbo, bindingresult result) { // 判断bindingresult是否保存错误的验证信息,如果有,则直接return if (result.haserrors()) { map return gracejsonresult.errormap(errormap); } // 获得前端传来的基本信息 string smscode = registerloginbo.getsmscode(); string mobile = registerloginbo.getmobile(); // 0. 校验验证码是否匹配 string redissmscode = redis.get(mobile_smscode mobile); if (stringutils.isblank(redissmscode) || !redissmscode.equalsignorecase(smscode)) { return gracejsonresult.errorcustom(responsestatusenum.sms_code_error); } return gracejsonresult.ok(); } 用户信息其实并不会经常发生变动,所以这块内容完全可以放入缓存,这么一来可以大大减少对数据库的压力。 private appuser getuser(string userid) { // 1. 查询redis中是否包含用户信息,如果包含则查询redis返回,如果不包含则查询数据库 string userjson = redis.get(redis_user_info ":" userid); appuser user = null; if (stringutils.isnotblank(userjson)) { user = jsonutils.jsontopojo(userjson, appuser.class); } else { user = userservice.getuser(userid); // 2. 由于用户信息不怎么会变动,对于千万级别的网站,这类信息数据不会去查询数据库,完全可以把用户信息存入redis // 哪怕修改信息,也不会立马体现,这也是弱一致性,在这里有过期时间,比如1天以后,用户信息会更新到页面显示,或者缩短到1小时,都可以 // 基本信息在新闻媒体类网站是属于数据一致性优先级比较低的,用户眼里看的主要以文章为主,至于文章是谁发的,一般来说不会过多关注 redis.set(redis_user_info ":" userid, jsonutils.objecttojson(user), 1); } return user; } 虽然在表设计的时候把文章阅读数字段进行了设计,但是在大数据量下,文章阅读的累计并发是很高的,在这里我们也是采用redis的计数功能来进行实现。 @override public gracejsonresult list(string articleid, integer page, integer pagesize) { if (page == null) { page = common_start_page; } if (pagesize == null) { pagesize = common_page_size; } pagedgridresult gridresult = commentportalservice.queryarticlecomments(articleid, page, pagesize); return gracejsonresult.ok(gridresult); } 生成html的步骤分为以下几步: 定义freemarker生成的html位置 配置freemarker基本环境 获得ftl模板 获得动态数据 融合ftl和动态数据,并输出到html @value("${freemarker.html.target}") private string htmltarget; @getmapping("/createhtml") @responsebody public string createhtml(model model) throws exception { // 0. 配置freemarker基本环境 configuration cfg = new configuration(configuration.getversion()); // 声明freemarker模板所需要加载的目录的位置 string classpath = this.getclass().getresource("/").getpath(); cfg.setdirectoryfortemplateloading(new file(classpath "templates")); // system.out.println(htmltarget); // system.out.println(classpath "templates"); // 1. 获得现有的模板ftl文件 template template = cfg.gettemplate("stu.ftl", "utf-8"); // 2. 获得动态数据 string stranger = ; model.addattribute("there", stranger); model = makemodel(model); // 3. 融合动态数据和ftl,生成html file tempdic = new file(htmltarget); if (!tempdic.exists()) { tempdic.mkdirs(); } writer out = new filewriter(htmltarget file.separator "10010" ".html"); template.process(model, out); out.close(); return "ok"; } 声明:iteye文章m6手机网页版登录的版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|