免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4538 | 回复: 3
打印 上一主题 下一主题

【求助】关于Python的Twisted框架的使用 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-10-26 16:48 |只看该作者 |倒序浏览
小弟最近在看twisted的学习资料,对于deferred的编程一直不是很理解。希望大大指点一下,万分感谢。
1.比如下面这段代码,我连接上服务端然后请求一个任务,接收到数据后运用deferred根据head来判断做哪一个任务,但做完任务,有产生一些数据,我不知道怎么主动传到服务器,难道要在protocol里面实现吗?
2.protocol.dataReceived()接收到的数据是一次完整的self.transport.write()的数据吗?还是要等conncetionLost回调函数被调用才算整个完整的数据包?
3.是不是每个单独的事务都各自实现一个protocol和factory类,然后用Deferred的回调函数里面再调用connectionTCP来执行另外一个事务。还是整个client和server就各自实现一个protocol和factory类?
4.平常这个Deferred怎么使用或者代码中的哪个位置使用,有没有什么好的资料或者代码可以给我学习一下。谢谢了。
  1. class MyClientProtocol(Protocol):


  2.     def connectionMade(self):
  3.         self.send_jsondata(None)

  4.     def send_jsondata(self, data):
  5.         json_data = {'head': 00006, 'client': 00001, 'cmd_id': 123}
  6.         send_data = json.dumps(json_data)
  7.         self.transport.write(send_data)


  8.     def dataReceived(self, data):
  9.         try:
  10.             recv_data = json.loads(data)
  11.         except:
  12.             print 'Failed loads data'
  13.         self.factory.process_data(recv_data)


  14.     def connectionLost(self, reason):
  15.         print reason


  16. class MyClientFactory(ClientFactory):
  17.     protocol = MyClientProtocol


  18.     def __int__(self):
  19.         self.d = Deferred()


  20.     def process_data(self, recv_data=None):
  21.         d.callback(recv_data)

  22. def process_event(recv_data):
  23.     if recv_data['head'] == 00012:
  24.         opener = Urllib2Opener()
  25.         username = recv_data['username']
  26.         password = recv_data['password']
  27.         login = Login(opener=opener, username=username, passwd=password)
  28.         print login.login()

  29. def conn_server(host, port):
  30.     factory = MyClientFactory()
  31.     from twisted.internet import reactor
  32.     reactor.connectTCP(host, port, factory)
  33.     return factory.d

  34. if __name__ == '__main__':
  35.     d = conn_server('127.0.0.1', 8007)
  36.     d.addCallback(process_event)
复制代码

论坛徽章:
0
2 [报告]
发表于 2013-10-27 11:09 |只看该作者
晕,没有哪位朋友指点一下吗?谢谢了。

论坛徽章:
0
3 [报告]
发表于 2013-10-29 09:44 |只看该作者
哪位朋友指点一下吗?

论坛徽章:
0
4 [报告]
发表于 2013-10-30 09:57 |只看该作者
都没有人用twisted吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP