Hot For Coding
Golang创建HTTP请求错误too many open files

Golang写了一个小程序抓信息然后发送一个HTTP请求到指定的服务器

http.Get("/someapi")

服务运行了大概三天,发现有多处错误日志打印,并且转发没有工作

xxx dial tcp x.x.x.x:8070: socket: too many open files

判断了半天,发现是因为http创建的请求没有Close,导致连接数量过多,不能继续创建新的socket连接,解决方法很简单,在所有的请求都要Close

res, err := http.Get("/someapi")
if err != nil {
  panic(err)
}

// 这句话很重要,就算你不需要响应数据,也需要总是关闭
defer res.Body.Close()
res.Close = true

...

READ ALL

Linux下tar命令exclude选项排除指定文件或目录

在Linux中可以用tar打包目录以方便传输或者备份,我们先来看一个例子

test文件夹有如下文件

[root@lee ~]# ll test
总用量 8
-rw-r--r--. 1 root root    0 4月  14 22:18 a.jpg
-rw-r--r--. 1 root root    0 4月  14 22:25 a.log
-rw-r--r--. 1 root root    0 4月  14 22:18 a.txt
-rw-r--r--. 1 root root    0 4月  14 22:18 b.jpg
-rw-r--r--. 1 root root    0 4月  14 22:25 b.log
-rw-r--r--. 1 root root    0 4月  14 22:18 b.txt
drwxr-xr-x. 2 root root 4096 4月  14 22:18 dir1
drwxr-xr-x. 2 root root 4096 4月  14 22:18 dir2

...

READ ALL

Nginx POST请求405 Not Allowed

full

Nginx有时候POST请求是405错误,查到相关信息是说Nginx把请求的URL误认成静态页面地址,比如你定义的一个API如下

var express = require('express')
var app = express()

app.post('/handle.html', function (req, res) {
  res.send('hello world')
})

以上代码,URL表面看好像是在请求服务器端的一个静态资源,但实际上是服务器端脚本在处理,解决方法是强制所有请求405都按200走,在server段加入以下代码

...

READ ALL

Linux升级Python提示Tkinter模块找不到解决

安装tkinter

在Linux中Python默认是不安装Tkinter模块

[root@li250-193 ~]# python
Python 2.6.6 (r266:84292, Feb 22 2013, 00:00:18) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import Tkinter
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named Tkinter
>>>

...

READ ALL

Linode十周年内存翻倍流量翻十倍

Linode每周年都有惊喜,今天迎来十周年惊喜比往年力度要大!

流量内存翻十倍

现在登录Linode买VPS的朋友应该是升级后的配置,看看截图

full

价格也都涨了0.5刀,但这样的配置以及Linode的口碑实在很有诱惑力,VPS的性能主要就是内存,现在不少VPS提供商都在卖512M,设置diahosting还有180M/10刀/每月

新买用户能享受到升级,老用户同样也可以免费升级,在Dashboard标签的又下方有一个升级提示,点击它系统会引导你进入下一步升级,最后进入队列

可能由于升级的人太多,所以基本都要排队。这里要提醒下准备升级的朋友进入队列后就关机了,这个过程需要多长时间就看你排在队伍的位置而定。服务器有程序跑的朋友慎重!

...

READ ALL

JavaScript快速获取图片宽高的方法

快速获取图片的宽高其实是为了预先做好排版样式布局做准备,通过快速获取图片宽高的方法比onload方法要节省很多时间,甚至一分钟以上都有可能,并且这种方法适用主流浏览器包括IE低版本浏览器。

我们一步一步进入这个过程

简陋的获取图片方式

// 图片地址 后面加时间戳是为了避免缓存
var img_url = 'https://www.qttc.net/static/upload/2013/13643608813441.jpg?'+Date.parse(new Date());
 
// 创建对象
var img = new Image();
 
// 改变图片的src
img.src = img_url;
 
// 打印
console.log('width:'+img.width+',height:'+img.height);

...

READ ALL

分享一道JavaScript闭包定时执行的笔试题

这道笔试题如下

var arr = ['第一次', '第二次', '第三次'];
 
for (var i=0; i < arr.length; i++) {
  setTimeout(function () {
    document.getElementById('info').innerHTML = arr[i];
  }, i * 10000);
}

问你执行结果。第一眼看到这道题,我当即就知道考的是闭包,于是我最快就直接说三次的arr[i]的值都是表示数组最后一个值,所以三次赋值结果都是第三次。时间是10秒第一次,20秒第二次,30秒第三次。

...

READ ALL

JavaScript判断DOM节点是否存在

JavaScript判断DOM节点是否存在页面中

JavaScript原生函数没有提供判断DOM节点是否存在方法,我们通常获取DOM节点几乎都是document.getElement...方法,会返回一个object数组合集,我们可以通过object[0],object[1]这样来访问这个合集的每一个对象。既然返回的是数组合集,那么就有length属性,而length大于等于1即表示DOM节点存在页面中

Code

Object.prototype.exist = function(){ 
  if(typeof this !='undefined' && this.length >= 1){
    return true;
  }

  return false;
};

...

READ ALL

PHP系统函数http_build_query系统函数使用方法

什么是http_build_query

使用给出的关联(或下标)数组生成一个经过URL-encode的请求字符串。参数formdata可以是数组或包含属性的对象。一个formdata数组可以是简单的一维结构,也可以是由数组组成的数组(其依次可以包含其它数组)。如果在基础数组中使用了数字下标同时给出了numeric_prefix参数,此参数值将会作为基础数组中的数字下标元素的前缀。这是为了让PHP或其它CGI程序在稍后对数据进行解码时获取合法的变量名

http_build_query有多种用法,不仅可以传入关联数组,同时也可以传入索引数组,甚至多维数组以及对象。

...

READ ALL

关于MongoDB最大连接数的查看与修改

在Linux平台下,无论是64位或者32位的MongoDB默认最大连接数都是819,WIN平台不知道,估计也没有人在WIN平台下使用MongoDB做生产环境

[root@DELL113 mongodb-linux-i686-2.4.1]# ./bin/mongo 192.168.6.42
MongoDB shell version: 2.4.1
connecting to: 192.168.6.42/test
>  db.serverStatus().connections
{ "current" : 1, "available" : 818, "totalCreated" : NumberLong(1) }

...

READ ALL