BLCL的博客小馆

标签 · 后端

首页

关于

归档

loading..
Python后端

一日一技:分布式系统的低成本权限校验机制

经常关注未闻Code的同学都知道,我做了一个叫做GNE的开源项目,它能够自动提取新闻类网页的正文。效果远远好于市面上其他的开源新闻提取工具。大家可能不知道,GNE还有一个高级版,叫做GnePro。它可以让你输入URL就自动提取新闻的正文,提取的字段比GNE多得多。并且已经在8个国家13万个网站上做过测试,识别准确率100%。GnePro是使用K8S搭建的爬虫集群。背后有几十台服务器,通过一个网关做负载均衡。在设计GnePro权限机制的时候,我希望它能够尽量简单,尽量不依赖第三方的组件。常规的权限校验机制一般是这样的,用户登录以后,在Cookies里面会有一个SessionId.当用户要查询数据时,往后端发起请求。后端从请求中拿到这个SessionId,到Redis或者其他数据库中,查询到这个用户的Sess..

更多
后端软件设计

一日一技:Bug分析,假删除导致文章发布成功却打不开的问题

公司有一个内部博客,大家可以在上面创建自己的账号,然后写文章在全公司分享。昨天这个内部博客开通了API,因此我准备写一个Python程序,把自己公众号文章都搬运上去。然后我就发现这个API接口有一个bug。并且根据它的现象,猜到它问题出在哪里。我先来简单描述一下现象。假设我硬盘上现在有50个Markdown文件。现在我要把它发布到网站上。简化代码如下:1234567import globimport requestsfor path in glob.glob('blog/*.md'): with open(path) as f: article = f.read() requests.post('https://xxx.yyy.com/post?token=abcasdf', jso..

更多
公众号后端NestJS

状态码造成微信公众号“该公众号提供的服务出现故障”

bug描述我们使用NestJS写后台代码,给微信公众号提供服务。用户给公众号发消息时,公众号会显示“该公众号提供的服务出现故障”。虽然后台代码可以正常处理业务,但这个提示非常影响用户体验。检查根据微信公众号文档给的提示,出现这个问题的原因是没有给微信服务器返回正确的信息。微信服务器需要的是success或者空的字符串。不能是json格式的字符串。搜了一下其他文章,有的说xml里也不能带有空格;有的说公众号绑定了第三方平台,要去解绑。但这些和我们的情况不一致。给公众号的接口是默认返回success的。查看运行log,发现用户发送1条消息给公众号,我们的服务端会收到4条一模一样的消息。这4条消息的MsgId是一样的。网上也有人提供了防止重复消息的办法。于是尝试以下方法维护一个map,key是MsgId。接收到..

更多
loading..
后端NestJSWebSocket

NestJS WebSocket 开始使用

使用NestJs提供WebSocket服务。本文会在新建项目的基础上增加2个类Gateway 实现业务逻辑的地方WebSocketAdapter WebSocket适配器新建项目新建一个项目来演示,用npm来管理项目。1nest new websocket-start得到一个有基础功能的工程。进入项目目录,安装2个库1npm i --save @nestjs/websockets @nestjs/platform-socket.io启动使用端口30011await app.listen(3001);npm run start启动我们的工程。用postman测一下,功能ok。gateway介绍Nest里的gateway(网关)只是一个用 @WebSocketGateway() 装饰器注释的类。从技术上讲,网..

更多
后端NestJS

NestJS 静态文件

为了提供静态资源,我们可以用@nestjs/serve-static包里的ServeStaticModule。服务器上的静态资源,一般指的是文件,比如图片、音频、视频、文本文件或者二进制文件等等。或者是一些单页面应用程序(Single Page Application, SPA)。从服务器上请求得到网页,然后网页再执行自己的业务。安装首先我们需要安装@nestjs/serve-static包。在工程路径下1$ npm install --save @nestjs/serve-static安装完成后,工程的package.json里会多出123"dependencies": { "@nestjs/serve-static": "^2.1.4",}使用在root AppModule中,引入ServeStat..

更多
后端NestJS

NestJS 部署与维护

我们可以把nestjs的工程传到服务器上,然后直接进行npm操作。也可以在本地打包出nestjs的包,将dist目录传到服务器上。在这里为了方便演示,我们描述的是将工程传到服务器后的操作。传工程文件,可以用github/gitee当作中间桥梁,也可以用vscode的插件传输,或者使用scp命令。同理,dist目录也可以传到github/gitee上,服务器直接使用编译好的文件。直接启动启动前,进入工程目录,先安装一次。1$ npm install用npm run命令启动服务12345# 开发模式$ npm run start# 观察模式$ npm run start:dev在服务器上,运行正式环境(生产环境 production)12345# 启动生产环境前 先start$ npm run start# ..

更多
loading..
后端译文Nodejs

手撸一个静态文档生成器[译]

目前有很多优秀的静态文档生成器,它们的工作原理比你想象的要简单得多。前言原文: Build a static site generator in 40 lines with Node.js作者: Douglas Matoso翻译许可: image img 为什么要造这个轮子当我计划建立个人网站时,我的需求很简单,做一个只有几个页面的网站,放置一些关于自己的信息,我的技能和项目就够了。毫无疑问,它应该是纯静态的(不需要后端服务,可托管在任何地方)。我曾经使用过Jekyll, Hugo和Hexo这些知名的静态文档生成器,但我认为它们有太多的功能,我不想为我的网站增加这么多的复杂性。所以我觉得,针对我的需求,一个简单的静态文档生成器就可以满足。嗯,手动构建一个简单的生成器,应该不会那么难。正文需求分析..

更多
loading..
后端Go译文

Go 开发中的十大常见陷阱[译]

Golang 中要注意的陷阱和常见错误。前言原文: The Top 10 Most Common Mistakes I’ve Seen in Go Projects作者: Teiva Harsanyi翻译许可: image-20210118234116954 img 我在 Go 开发中遇到的十大常见错误。顺序无关紧要。正文未知的枚举值让我们看一个简单的例子:1234567type Status uint32const ( StatusOpen Status = iota StatusClosed StatusUnknown)在这里,我们使用 iota 创建了一个枚举,其结果如下:123StatusOpen = 0StatusClosed = 1StatusUnknown = 2现在,让我们..

更多