最新

js

express.js 源码二探 —— request篇

接上篇初探 上篇写的很乱,只是个人临时决定写的。主要试图从app.use和app.[method]之间区别着手,来解释express的中间件和路由的实现逻辑。 本篇 本篇很有可能依然保持上篇的发散性思维,所以各位读者可能要小心阅读,避免吐槽而亡。 环境 保持与上篇一致,源码版本是express.js 4.14.1 request源码 打开request.js,从上往下看代码 IncomingMessage var req = exports = module.exports = { __proto__: http.IncomingMessage.prototype }; 代码具体戳这里 我们要导出request这个对象,跟http.IncomingMessage有什么关系,而且是挂在request的__proto__原型链上 我们知道nodejs提供的原生http对象通常是这么用的 var http = require('http'); http.createServer( (function(

By chainhelen

ollydbg

ollydbg 试手 问题:i = i++

问题 很久以前准备写的一篇blog,当时只写了题目,调试用ollydbg搞的,最近才想起来要填坑 大概是问,如下c系语言 int i = 0; i = i++; 那么最终 i 的值是多少 调试环境 本来应该是ollydbg,但是现在电脑是64位,还是用ida pro 1.6 64位 codeblocks 16.01 gcc version 4.9.2 windows10 main.cpp #include <stdio.h> int main() { int i = 0; i = i++; //为什么要加hello world,纯粹只是为了让调试的时候方便点 printf(

By chainhelen

js

ajax-hook.js 剖析

问题 今天某群里有人提了这样一个问题 就是在chrome调试器明明打印出来了xhr,能看到response的值,而在代码里面直接打印response却看不见这个值 结论 直接上结论,console.log打印的是xhr的引用,也就是说,open在打印的时候,xhr其实是对的,xhr.response也确实是空字符串的。但是后来请求完毕过后,xhr.response这个值被修改了,接着才是点开chrome dev-tool里面的XMLHttpRequest,所以这时候才能看到response,产生了一种错觉。 ajax-hook.js 发现这个库代码写得十分简洁 这里是demo代码 hookAjax({ onreadystatechange:function(xhr){ console.log("onreadystatechange called: %O",xhr) //return true }, onload:function(xhr){

By chainhelen

tcp

大量假established

问题 上次tomcat并发一直有个问题没有解决,就是直播中途有一段时间,广东这边部分地区不能访问. 而从日志上来看,那个时间段是有用户授权访问的. 而且负载均衡各项硬件资源都是正常的(CPU、内存、网络连接均占用不到20%,未达到瓶颈). 虽然有怀疑是dns解析问题,但是复现不出来了. 活动过后测试 测试复现中出现大量错误 READ ECONNRESET、CONNECT ETIMEOUT 下载了原生的tomcat,只访问index.html,也出现同样的问题 准备过程 服务器A 运行脚本,发送http请求到服务器B上的8081端口 ip地址为112.74.128.91 服务器B 上跑着tomcat,监听8081端口 ip地址为120.24.180.89 两个ip地址都是公网地址 服务器A 第一 为了只对出问题的报文进行研究,我在发送http报文的url上添加一些参数. //main.js "use strict" let

By chainhelen

linux

tomcat日志提取

问题 之前以为xx网红直播能带来大量流量导入商城,所以做了大量准备服务器做集群,每台服务器上都有tomcat日志,前面因为时间太赶,所以没有写分析用户行为的代码,所以现在就想着简单提取一下 linux工具提取 日志在如下文件夹下 /home/ch/logs/lwcmall_A001.logs/localhost_access_log.2017-01-03.txt /home/ch/logs/lwcmall_A002.logs/localhost_access_log.2017-01-03.txt /home/ch/logs/lwcmall_A003.logs/localhost_access_log.2017-01-03.txt /home/ch/

By chainhelen

js

write 闲谈

问题 今天项目遇到一个问题,简化一下问题。多个client连接经过一些事件触发传输数据给main,main程序本身维护着多个server连接,其中一个server可能对应多个client。将数据写入server,一开始怀疑会不会数据混在一起的问题。后来明白了不会,驱动程序底层都是同步处理,在一次操作内连续输出,不被其它线程插入数据。 先来测一把: //client.js "use strict" let net = require('net'); let stream = net.connect('/tmp/test'); let a = ""; let N = 2; for(let i = 0;i < N;i++){ a+="

By chainhelen

golang

mysql数据一致性闲谈

外部连接 首先让mysql在远程服务器上,现在希望它能被外部ip访问 在/etc/my.cnf里面,找到bind-address修改为0.0.0.0, //重启mysql service mysql restart //查看mysql服务 netstat -anp | grep mysqld 看到如下监听端口已经是0.0.0.0 但是发现外部ip还是访问不了远程的mysql 现在远程服务器上用mysql-client连上 //root 是用户名 mysql -u root -p //mysql本身的数据库 use mysql //创建 create user 'mysqlremoteusername'@'0.0.0.0' identified

By chainhelen