Python Web 服务开发者: 通过 SMTP 处理 SOAP
2008-09-30 13:01:38 来源:WEB开发网清单 1. 服务器的定义代码class OurServer(smtpd.SMTPServer):
#A place to store the current ID of the message that we are processing.
currentID = None
#This is the callback from SMTPServer that all SMPTServers
#must implement to handle messages
def process_message(self, peer, mailfrom, rcpttos, data):
#
# Snip out code for process_message
# It will be discussed below
#
#This is the 2.2 way of running asynchronous servers
server = OurServer(("localhost", 8023),
(None, 0))
try:
asyncore.loop()
except KeyboardInterrupt:
pass
一旦接收到一条消息,我们就可以做一些简单的测试来看看它到底是不是一个 SOAP 请求。如果是,那么我们可以将它传送给 ZSI 来分派该消息。由于 ZSI _Dispatch 方法不允许额外的参数,所以我们需要在服务器的实例中存储当前消息标识(这样我们就可以在结果中设置它了)。当然,在一台流量很大的服务器上,这种解决方案永远不会像您期望的那样工作,即一次分派多个传入的请求。为避免出现这种情况,我们需要以某种方式使该信息通过 ZSI,或者为每个请求创建一个单独的服务器实例。
一旦我们有了结果,不管这些结果是一个有效的响应还是错误,我们都把结果放在一条电子邮件消息中发送出去。您将注意到,当我们发送电子邮件消息时,我们使用常见的方法 common.SendMessage (请参阅 清单 2)。这个助手函数使用另一个线程将消息发送到指定的服务器。这是必需的,只有这样发送过程才不会因为等待服务器连接、网络延迟等原因被阻塞。在生产系统中,这个函数一定会变得更复杂,并需要使用某种排队机制来处理网络故障、服务器宕机等问题。
更多精彩
赞助商链接