Twisted系列-机器人

 如果我们把网络的命令抽象出来, 所有的网络服务基本上都一样, 除了服务端口不同而已.

LineReceiver类就是帮助封装这些命令的.



考虑用LineReceiver实现一个机器人.


  1. # -*- coding: utf-8 -*-
  2. from twisted.protocols.basic import LineReceiver
  3. class AnswerProtocol(LineReceiver):
  4.     answers = {’How are you?’: ’Fine’, None : "I don’t know what you mean"}
  5.     
  6.     def lineReceived(self, line):
  7.         if self.answers.has_key(line): 
  8.             self.sendLine(self.answers[line]) 
  9.         else: 
  10.             self.sendLine(self.answers[None])

在我们启动这个机器人之前, 我们需要谈论一下状态机.

很多twisted协议处理中都需要状态机来记录当前的状态, 下面是一些建议:

1.不要编写过大, 过复杂的. 状态机应该一次只处理一个层次的抽象.

2. 使用python语言的动态性创建 open ended状态机, 比如SMTP客户端.

3. 不要把协议处理代码和应用相关代码混合.




完整的代码:


  1. # -*- coding: utf-8 -*-
  2. from twisted.protocols.basic import LineReceiver
  3. from twisted.internet.protocol import Protocol, Factory
  4. from twisted.internet import reactor
  5. class AnswerProtocol(LineReceiver):
  6.     answers = {"How are you?": "Fine", None : "I don’t know what you mean"}
  7.     
  8.     def lineReceived(self, line):
  9.         if self.answers.has_key(line): 
  10.             self.sendLine(self.answers[line]) 
  11.         else: 
  12.             self.sendLine(self.answers[None])
  13.             
  14.             
  15.             
  16. class AnswerFactory(Factory):
  17.     protocol = AnswerProtocol
  18.     



#开始启动服务

factory = AnswerFactory()


reactor.listenTCP(8007, factory) 

reactor.run()




客户端连接:


FunCat:~ Daniel$ telnet 127.0.0.1 8007

Trying 127.0.0.1...

Connected to localhost.

Escape character is '^]'.

How are you?

Fine

What's your name?

I don’t know what you mean

Connection closed by foreign host.


上一篇: Twisted系列-简单的服务器
下一篇: web.py 0.3 - 无废话实例
d_yang
博客等级 码龄18年 33粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值