V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  lianghui  ›  全部回复第 4 页 / 共 5 页
回复总数  87
1  2  3  4  5  
2014-11-22 23:05:29 +08:00
回复了 xdf331 创建的主题 Python python 如何连续读取一个由服务器发来的非阻塞请求?
@xdf331 复杂的,可能还需要处理follow,以及if-modify-sine等,和断点请求
2014-11-22 21:42:35 +08:00
回复了 xdf331 创建的主题 Python python 如何连续读取一个由服务器发来的非阻塞请求?
2014-11-22 21:37:03 +08:00
回复了 xdf331 创建的主题 Python python 如何连续读取一个由服务器发来的非阻塞请求?
如果是tornado4, 可以用chunked transfer enoding传送,那么客户端支持chunk编码就可以做数据接收了。http://en.wikipedia.org/wiki/Chunked_transfer_encoding。

tornado3不支持chunk:




import tornado.ioloop
import tornado.iostream
import socket

```python
class WebRequest(object):

LINE_END = b'\r\n'
def __init__(self, host, port=80, callback=None):
self.host = host
self.port =port
self.headers = {}
self.data = ''
self.callback = callback
self.transfer = 'stream'
self.http_ver_with_status = ''

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
self.stream = tornado.iostream.IOStream(s)
self.stream.connect((self.host, self.port), self.send_request)


def send_request(self):
self.stream.write(b"GET / HTTP/1.0\r\nHost: %s\r\n\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36\r\n" %self.host)
self.stream.read_until(self.LINE_END*2, self.on_headers)

def on_headers(self, data):
for line in data.split(self.LINE_END):
parts = line.split(b":", 1)
if len(parts) == 2:
self.headers[parts[0].strip()] = parts[1].strip()
else:
self.http_ver_with_status = line
if 'Content-Length' in self.headers:
if int(self.headers[b"Content-Length"]) > 0:
print self.headers
print 'content_length: ', self.headers[b"Content-Length"]
self.transfer = 'content_length'
self.stream.read_bytes(int(self.headers[b"Content-Length"]), self.on_body)
else:
self.callback(self)
self.stream.close()

elif self.headers.get(b'Transfer-Encoding') == 'chunked':
print 'chunk'
self.transfer = 'chunked'
self.on_chunk()
else:
self.transfer = 'stream'
callback = lambda data: self.on_stream(data, True)
streaming_callback = lambda data: self.on_stream(data, False)
self.stream.read_until_close(callback, streaming_callback)

def on_body(self, data):
self.data += data
self.callback(self)
self.stream.close()

def on_chunk(self):
self.stream.read_until_regex(self.LINE_END, self.on_chunk_header)

def on_chunk_header(self, data):
length = int(data)
if length > 0:
self.stream.read_bytes(length+len(self.LINE_END), self.on_chunk_data)
else:
self.stream.read_bytes(length+len(self.LINE_END), self.on_chunk_end)


def on_chunk_end(self, data):
self.callback(self)
self.stream.close()


def on_chunk_data(self, data):
print data
self.data += data
self.on_chunk()


def on_stream(self, data, finish=False):
# do some thing
if finish:

self.data += data
self.callback(self)
self.stream.close()
else:
self.data += data


def callback(req):
print req.http_ver_with_status
print "Transfer :" , req.transfer
print "Headers: ", req.headers
print "Data: ", req.data
req = WebRequest('cn.bing.com', 80, on_bing)


def on_bing(req):
print req.http_ver_with_status
print "Transfer :" , req.transfer
print "Headers: ", req.headers
print "Data: ", req.data
tornado.ioloop.IOLoop.instance().stop()

if __name__ == '__main__':
req = WebRequest('www.baidu.com', 80, callback)
tornado.ioloop.IOLoop.instance().start()
```
2014-11-19 12:54:43 +08:00
回复了 mulog 创建的主题 Python 用 tornado 的同学 你们用 Nginx 吗
多台机器跑可以用nginx,如果一台机器直接用tornado多进程监听同一端口就行了。
2014-11-11 10:19:20 +08:00
回复了 nevernet 创建的主题 程序员 十年两茫茫,论如何才能深入进去?
剁手转pm
2014-11-06 23:27:44 +08:00
回复了 cdxem713 创建的主题 MySQL Mysql 的优势是什么?
如果只是简单sql查询,mysql性能不会差,小站够用。
2014-11-05 11:18:19 +08:00
回复了 dbas 创建的主题 Python tornado 除了同 Supervisor 搭吗?有没其它组合
自己简单写一个forking和内存管理器
2014-11-04 14:26:55 +08:00
回复了 solesschong 创建的主题 程序员 求 3-5w 同时在线的即时通讯后台
@hcymk2 对于xmpp手机端不是那么好使,首先网络而言移动网络没有有线网络稳定和宽带大。另外本身协议臃肿会使解析麻烦进而耗电耗流量。在gameloft时使用的是ejabberd作为游戏的im,但结果非常不不尽人意,对世界的广播相当差。不知道是否什么原因,工会到50人而已,延迟相当严重。最后不得不放弃自定义一套简洁的协议和重新设计集群。
2014-11-04 11:18:05 +08:00
回复了 solesschong 创建的主题 程序员 求 3-5w 同时在线的即时通讯后台
MQTT绝对适合,手机耗电少,数据包小。
2014-09-25 10:30:40 +08:00
回复了 beakey 创建的主题 求职 只凭这个博客可以找个什么样的工作?
如果真的想做c++的话,应该对boost库有所了解,然后ace,eventlib,asio等网络库。
当然能了解内存管理技术(内存池,对象池),状态机等。然后网络协议tcp/ip等技术能够应用。开发c/c++应该还不错的。最后就是一个行业的技术极点了,比如游戏server等
2014-09-24 16:43:40 +08:00
回复了 system 创建的主题 程序员 推荐个 CMS,做垃圾站用
drupal
2014-09-20 23:06:37 +08:00
回复了 loop4 创建的主题 Python 请问各位在工作中常用哪些 python 标准库和第三方库?
说说在项目中用到过的库:
tornado
cherrypy
routes
requests
python-ldap
mysqldb
python-oatuh
zeromq(python-zmq)
openssl
crypto
paramiko
boto
gevent
webob

2014-09-19 11:17:48 +08:00
回复了 kevinyoung 创建的主题 Python 求教关于 functools.partial 冻结参数顺序的问题
写的太罗嗦了:

callback = lambda a,c: func(a,"blablablabla", c)
callback("a", "c")
2014-09-18 23:50:32 +08:00
回复了 fucker 创建的主题 Python 问一下大家都用什么框架开发 web
tornado, cherrypy, webob用的比较多
2014-09-11 14:25:08 +08:00
回复了 yueyoum 创建的主题 求职 [成都]寻靠谱手游团队
能驾驭500台机器集群吗?
2014-09-10 17:42:59 +08:00
回复了 songerzhou 创建的主题 酷工作 [成都]华为招聘软件开发、软件测试、应用支撑
招聘写的实在,赞
2014-08-19 13:16:56 +08:00
回复了 suifengdaren 创建的主题 DevOps 说说大家在服务器上干过最蠢的事情!
dd if=/dev/zero of=/dev/sda
2014-08-11 10:52:04 +08:00
回复了 wangfeng3769 创建的主题 Python python 下的多线程选哪个比较好?
多线程有助于io集中型, 如果多线程没有办法完成任务,又想使用把多核使用起来,那就fork吧。
2014-08-08 11:47:03 +08:00
回复了 for8ever 创建的主题 Python Flask + nginx1.6 + uwsgi 如何配置?
1  2  3  4  5  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3312 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 90ms · UTC 12:31 · PVG 20:31 · LAX 04:31 · JFK 07:31
Developed with CodeLauncher
♥ Do have faith in what you're doing.