python web开发框架

 Django, python  python web开发框架已关闭评论
8月 242017
 

Python web开发框架:

Django 、Flask、Tornado、Bottle、Twisted

 

Tornado: http://www.tornadoweb.org/en/stable/

Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed.

 

Twisted: https://pypi.python.org/pypi/Twisted/     http://twistedmatrix.com/trac/

An asynchronous networking framework written in Python

 

twisted/tornado 更是一个server,框架部分只是方便使用该server而附带的,不是重点;你可以选择使用tornado server + Django框架, 而对于Bottle框架而言,是允许指定使用哪种server的,支持的server有:

Bottle默认使用的server为: 如下:

所以,有些技术不是同一个层面的,不能相提并论,非此即彼;

 

Django or Flask:

https://www.zhihu.com/question/33538127

 

http://bottlepy.org/docs/dev/index.html

 

http://www.cnblogs.com/suzhigang/p/6208244.html

 Posted by at 下午 3:40

logstash-output-syslog 之 facility定义问题

 logstash, ruby  logstash-output-syslog 之 facility定义问题已关闭评论
8月 222017
 

问题:

当我们在logstash-output-syslog中配置facility为local6的时候,实际上走的是local4;而定义facility为local7的时候,实际上走的是local5,但是,定义为daemon的时候,确实是daemon

原因:

  1. 参考源码: https://github.com/phpor/logstash-output-syslog/blob/master/lib/logstash/outputs/syslog.rb 关于facility的定义有一个数组:

    而rfc中的定义如下: https://tools.ietf.org/html/rfc3164#section-4.1.1



    我们发现,4和10的定义是重复的,9和15的定义是重复的; 而插件源码中把这两个重复的条目就简单去掉了,于是就导致facility-code就对不上了
  2. 解决办法: 把重复的两项补回去就可以了
 Posted by at 上午 10:05

ngx.resp.get_headers()

 lua, nginx  ngx.resp.get_headers()已关闭评论
8月 022017
 

 

syntax: headers = ngx.resp.get_headers(max_headers?, raw?)

context: set_by_lua*, rewrite_by_lua*, access_by_lua*, content_by_lua*, header_filter_by_lua*, body_filter_by_lua*, log_by_lua*, balancer_by_lua*

Returns a Lua table holding all the current response headers for the current request.

This function has the same signature as ngx.req.get_headers except getting response headers instead of request headers.

 

参考: https://github.com/openresty/lua-nginx-module#ngxrespget_headers

注意: 字段名都会转换成小写

 Posted by at 下午 2:27

golang 中的只读变量

 go  golang 中的只读变量已关闭评论
7月 182017
 

示例:

上面是 golang.org/x/net/proxy/direct.go 里面的代码

  1. 我们显然是可以在proxy包外访问到Direct变量的
  2. 我们显然是无法在proxy包外new 一个 direct 结构变量的
  3. 由于2,而且我们无法改变Direct的变量类型,所以,我们做不到给Direct进行重新赋值
 Posted by at 下午 12:03

php 获取数组中前N个值

 PHP  php 获取数组中前N个值已关闭评论
6月 072017
 

如下,获取数组中的前2个元素:

难道还有更方便的方法?

 Posted by at 下午 2:41

PHP 协程示例

 PHP  PHP 协程示例已关闭评论
4月 102017
 

在PHP没有协程的时候,我们也玩过并发多线程,但是,对于结果的实时处理就没那么方便了(尽管也可以实现),有了协程之后,代码看起来就会舒服许多,参考下面的multi_cmd.php

 

multi_cmd.php :

我们见到的更多的可能是并发执行多个任务,每个任务都完成后(如: curl异步多请求)在一并处理结果,如果处理结果本身也是需要时间的话,就会比较浪费时间,如果能完成一个处理一个的结果,效果会好一些

 

上面脚本存在瑕疵:

1、为了避免某个流阻塞整个进程,上面使用了非阻塞;但是,后面的死循环却导致了大量cpu的占用,所以,考虑使用stream_select会更好一些

2、为了能控制并发数就更好了,并发太大也可能不是好事

 

改进的脚本如下:

 

注意:

在使用stream_select 的时候, 是否阻塞也就不重要了

 Posted by at 下午 12:54

PHP 中执行命令的几种方式比较

 PHP  PHP 中执行命令的几种方式比较已关闭评论
4月 042017
 

system/exec 函数:

这两个函数会利用/bin/sh 指定的shell来执行指定的命令,所以,指定的命令实际上不仅可以包含可以执行的命令和参数,还可以是对应shell的内置命令以及shell支持的控制结构。

缺点: 无法区分标准输出与标准错误

注意: 这两个函数执行的外部命令默认继承了php进程的标准输入、标准输出和标准错误,你可以通过返回值得到进程的标准输出,但是标准错误却悄悄地流进了php进程定义的标准错误输出里面去了;更加隐晦的是,对于php-fpm进程来讲,该外部进程也默认listen(继承来的)了php-fpm监听的端口,但是肯定不会去处理php-fpm请求,一般情况下不会有问题,特殊情况下回让你莫名其妙

pcntl_exec 函数

该函数会取代当前执行的进程空间,而且是不会再回到当前进程空间,可能你很少会用到该函数,但是,当你确实需要该函数的时候,却又是没有其他函数可以替代的,如:

echo 2 是不可能被执行到的

注意: pcntl_exec不同于其他函数,并不会使用shell来执行指定的命令,而且指定的命令需要是要执行的可执行文件的全路径

proc_open 函数

这个是我最喜欢的函数:

  1. 可以通过proc_close得到外部进程的返回值
  2. 可以定义外部进程的标准输入、标准输出、标准错误,并且可以区分外部进程的标准输出和标准错误
  3. 一定程度上还可以实现并行执行多个外部命令

 

proc_open 示例:

 

 Posted by at 下午 2:59

golang 可以用于windows编程吗

 go  golang 可以用于windows编程吗已关闭评论
2月 052017
 

golang 可以用于windows编程吗?

理论上可以,但是又有哪个IDE去支持golang进行windows编程并且能和visual studio相媲美呢?

每种语言都有他自己的用武之地,没有哪个语言可以独步天下,称霸武林的。

 Posted by at 上午 12:25