• 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

1 2 3