WEB开发网
开发学院软件开发Python Python Web 服务开发者: 通过 SMTP 处理 SOAP 阅读

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 t

清单 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)。这个助手函数使用另一个线程将消息发送到指定的服务器。这是必需的,只有这样发送过程才不会因为等待服务器连接、网络延迟等原因被阻塞。在生产系统中,这个函数一定会变得更复杂,并需要使用某种排队机制来处理网络故障、服务器宕机等问题。

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

Tags:Python Web 服务

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接