华子的代码空间

逆水行舟,不进则退。 关注系统编程、网络编程、并发、分布式。

上一页 1 2 3 4 5 6 ··· 10 下一页

2013年3月8日

tornado使用长连接并运行在nginx反向代理后面

摘要: 使用nginx作为tornado的反向代理是非常不错的,因为python的GIL不能充分利用多核资源。可以在一台机器上运行多个python进程,监听多个端口,前面用nginx做代理。下面给出一个nginx的配置例子,例子中tornado使用长连接,运行聊天服务器。 1 upstream chat_cluster{ 2 server 127.0.0.1:10000; 3 server 127.0.0.1:10001; 4 ip_hash; 5 keepalive 1024; 6 } 7 8 server 9 {10 listen 80;11 se... 阅读全文

posted @ 2013-03-08 20:24 华子的代码空间 阅读(2187) 评论(1) 推荐(0) 编辑

tornado长连接断开的处理机制

摘要: 使用tornado的异步http调用时候,在继续RequestHandler的子类中,可以重载on_connection_close方法。此方法在对端连接关闭,或者在socket上读写错误的时候被调用,可以让服务器做一些清理。调用过程大概这样:首先说明,ioloop没有保证读写出错的时候做什么,以及怎么做。这些都是由iostream来操作的,因为它就是对ioloop的封装,增加了错误处理、各种情况下的回调、读写缓存等等。1. on_connection_close虽然是在web.py中定义的,但是其实它是由iostream来调用,tcp_server/http_server都是继承了此方法。2 阅读全文

posted @ 2013-03-08 20:18 华子的代码空间 阅读(3589) 评论(0) 推荐(0) 编辑

2013年3月7日

关于HTTP长连接的保持和断开

摘要: 最近在折腾一个长连接HTTP服务器的时候,积累了一些经验,下面总结出来:1. 最好使用支持HTTP/1.1的服务器,HTTP/1.1默认支持keep-alive,不需要像HTTP/1.0那样检测Connection: keep-alive.2. 浏览器的刷新也会断开长连接,如果在服务端有一些判断,要注意发生重复的可能。3. 在用户关闭浏览器的标签的时候,如果有多个页面和服务器保持长连接,服务器应检测对应的页面,并做清理。4. 将长连接服务器位于反向代理之后,应在反向代理服务器上设置保持keep-alive,如nginx。 这样可显著减少后端upstream服务器的压力。5. 检测用户刷新页面. 阅读全文

posted @ 2013-03-07 19:03 华子的代码空间 阅读(5464) 评论(3) 推荐(1) 编辑

tornado中模板的变量命令冲突

摘要: 在写一个tornado模板,无意中将一个循环中的临时变量和其他位置的一个变量使用了同样的命名。结果tornado在渲染模板的时候报告,不能找到另外一个变量。开始百思不得其解,认为不可能发生。后来详细看了报错信息,才定位到了问题所在。 阅读全文

posted @ 2013-03-07 13:36 华子的代码空间 阅读(262) 评论(0) 推荐(0) 编辑

2013年3月6日

Nginx对后端upstream server启用keepalive

摘要: Nginx upstream目前只有短连接,通过HTTP/1.0向后端发起连接,并把请求的"Connection" header设为"close"。Nginx与前端的连接默认为长连接,一个用户跟Nginx建立连接之后,通过这个长连接发送多个请求。如果Nginx只是作为reverse proxy的话,可能一个用户连接就需要多个向后端的短连接。如果后端的服务器(源站或是缓存服务器)处理并发连接能力不强的话(比如单进程的squid),就可能导致瓶颈的出现。从nginx 1.1.4 开始有了原生的ngx_http_upstream_keepalive 模块 和& 阅读全文

posted @ 2013-03-06 19:49 华子的代码空间 阅读(2886) 评论(0) 推荐(0) 编辑

tornado中计算etag的一个BUG

摘要: 在tornado中是根据send buffer中的内容计算etag的,而这样对于一些只判断逻辑的页面会有问题。计算etag的代码如下: 1 def compute_etag(self): 2 """Computes the etag header to be used for this request. 3 4 May be overridden to provide custom etag implementations, 5 or may return None to disable tornado's default etag support. 6 阅读全文

posted @ 2013-03-06 15:16 华子的代码空间 阅读(715) 评论(0) 推荐(0) 编辑

2013年2月27日

Twisted echo server

摘要: 1 #!/usr/bin/env python 2 import sys 3 4 if 'linux' in sys.platform: 5 from twisted.internet import epollreactor 6 try: 7 epollreactor.install() 8 print "EPOLL Reactor installed." 9 except:10 pass11 elif 'win' in sys.platform:12 from twisted.internet import ... 阅读全文

posted @ 2013-02-27 14:04 华子的代码空间 阅读(459) 评论(0) 推荐(0) 编辑

2013年2月25日

rp_filter及Linux下多网卡接收多播的问题

摘要: 工作中曾遇到一个很奇怪的问题,我奉命调查。事情是这样的,有一台双网卡的机器,上面装有Fedora8,运行一个程序。该程序分别在两个网口上都接收多播数据,程序运行是正常的。但是,后来升级系统到Fedora13,发现就出问题了:在运行几秒钟后,第2个网口上就接收不到多播数据了。能不能收到多播,取决于交换机是不是往这个网口上转发多播数据。程序在起动的时候,会发一个IGMP的Add Membership的消息,交换机将把这个网口加入多播组。当在其他网口上收到该地址的多播包后,会转至这个网口。其后,为了确认该接收者一直在线,交换机会发送一个IGMP Query消息,接收者反馈一个IGMP Report消 阅读全文

posted @ 2013-02-25 14:17 华子的代码空间 阅读(4711) 评论(0) 推荐(0) 编辑

2013年2月21日

unix时间戳转换

摘要: # -*- coding: utf-8 -*- import time def timestamp_datetime(value): format = '%Y-%m-%d %H:%M:%S' # value为传入的值为时间戳(整形),如:1332888820 value = time.localtime(value) ## 经过localtime转换后变成 ## time.struct_time(tm_year=2012, tm_mon=3, tm_mday=28, tm_hour=6, tm_min=53, tm_sec=40, tm_wday=2, tm_yd... 阅读全文

posted @ 2013-02-21 11:00 华子的代码空间 阅读(334) 评论(0) 推荐(0) 编辑

2013年1月23日

系统时间不对导致cookie设置不成功

摘要: 在测试一台服务器过程中,服务器上运行tornado。但是客户的浏览器总是不能正确设置cookie,观察的效果为cookie无效。已经排除代码和环境问题。在复制文件的时候,文件系统报告文件时间戳不对。于是检查系统时间,发现时间相差很大。正确设置系统时间后,服务器工作正常。总结: cookie设置后,浏览器接收到发现cookie的时间和本地时间相差太大,随舍弃此cookie。 阅读全文

posted @ 2013-01-23 18:10 华子的代码空间 阅读(492) 评论(0) 推荐(0) 编辑

上一页 1 2 3 4 5 6 ··· 10 下一页

导航