获取与端点的连接

系统 1468 0

原创博文,转载请注明 出处

API 文档: 点击

      在Twisted中,我们使用高级抽象的接口在传输和接收数据,比如 ITransport IProtocol 。同时,Twisted也提供了构建面向数据流连接的端点的接口:   IStreamServerEndpoint  and IStreamClientEndpoint 。 “数据流”的意思是指端点连接是一个连续流的数据传输而不是一个序列的离散数据报:

 TCP is a "stream" protocol whereas UDP is a "datagram" protocol。

 创建和使用Endpoints :   

    通过前几节我们知道,编写一个客户端或者服务器,我们通常是指定了地址和端口。但是有的时候在无需调整我们的程序的前提下,我们希望允许用户指定监听和连接的地址,允许用户请求不同的策略,这时候我们就需要使用 clientFromString  or  serverFromString

每种类型的端点不过就是一个接口和一个需要参数的简单方法。serverEndpoint.listen(factory)在你的protocol factory下 监听端点,clientEndpoint,connect(factory)在启动一个连接请求。

Servers and Stopping:

      IStreamServerEndpoint.listen  返回一个 由 IListeningPort 引发   Deferred  。注意这个Deferred可能回调一个errback,最常见的情况就是有另外的程序在占用所请求的端口,实际情况因人而异。 如果你收到这样的一个错误,这意味着您的应用程序实际上是没有监听,将不会得到任何传入的连接。在这种情况下,它是提醒管理员的服务器出现了错误,尤其是如果你只有一个监听端口。

       还有,如果连接一旦成功,它将永远监听,如果你需要关闭,除了对服务器全部关闭的方法(reactor.stop()),确保你对监听端口对象保留一个引用,你可以调用 IListeningPort.stopListening ,最后,记住stopListening 本身返回一个deferred,直到deferred被触发,对于端口的监听可能没有完全停止。

       大多数服务器应用程序不必担心这些细节。

Clients and Cancelling:

      connectProtocol  把一个  Protocol  实例 连接到给定的 > IStreamClientEndpoint 。连接一旦建立,它返回一个由protocol 触发的deferred。通过   client documentation  我们可以看到应用的例子.

      connectProtocol  是一个包装了低级 API:  IStreamClientEndpoint.connect 的包装器,它为尝试一个外部连接使用 protocol factory。其返回一个deferred 

 ,deferred伴随着一个由 factory's  buildProtocol  方法或者连接失败产生的errbacks返回的IProtocol 所触发。 

     有的时候连接耗费了很长时间,你的用户可能因此而感觉烦恼。如果需要,你可以调用   Deferred.cancel 来放弃连接。这应该会引起deferred的errback,通常是 CancelledError 。尽管一些端点提供了内置的超时,但是该接口并不能保证所有的都拥有。为此我们可以自己构造一个方法来取消一个永远保持等待的连接尝试。

下面是一个非常简单的30秒超时: 

      attempt =
      
         connectProtocol(myEndpoint, myProtocol)

reactor.callLater(
      
      30, attempt.cancel)
    

注意,如果你之前用过clientFactory,记住endpoint.connect()使用Factory而不是clientFactory。如果你传递一个clientFactory给connec方法,将会调用

clientConnectionFailed  and  clientConnectionLos。

使用 Endpoint的好处

   待理解。

    有的时候,你也不必需要使用Endpoint,如果你只是绑定一个简单的端口, 你只需要使用构造 IService ,(使用  strports.service ) 这很符合 the twistd plugin API 的框架。这种方法提供了与Endpoint同样的灵活性。

 

  Endpoint Types Included With Twisted:

    clientFromString  and  serverFromString 所使用的解释器可以通过第三方 plugins来扩展。所以endpoints的可用与否取决于你的系统中所安装的包,但是Twisted本身包含了一组基本的可用端点。

  

Clients

  • TCP. Supported arguments: host, port, timeout. timeout is optional. For example,  tcp:host=twistedmatrix.com:port=80:timeout=15 .
  • SSL. All TCP arguments are supported, plus: certKey, privateKey, caCertsDir. certKey (optional) gives a filesystem path to a certificate (PEM format). privateKey (optional) gives a filesystem path to a a private key (PEM format). caCertsDir (optional) gives a filesystem path to a directory containing trusted CA certificates to use to verify the server certificate. For example, ssl:host=twistedmatrix.com:port=443:caCertsDir=/etc/ssl/certs .
  • UNIX. Supported arguments: path, timeout, checkPID. path gives a filesystem path to a listening UNIX domain socket server. checkPID (optional) enables a check of the lock file Twisted-based UNIX domain socket servers use to prove they are still running. For example, unix:path=/var/run/web.sock .

Servers

  • TCP (IPv4). Supported arguments: port, interface, backlog. interface and backlog are optional. interface is an IP address (belonging to the IPv4 address family) to bind to. For example,  tcp:port=80:interface=192.168.1.1 .
  • TCP (IPv6). All TCP arguments are supported, with interface taking an IPv6 address literal instead. For example, tcp6:port=80:interface=2001\:0DB8\:f00e\:eb00\:\:1 .
  • SSL. All TCP arguments are supported, plus: certKey, privateKey, and sslmethod. certKey (optional, defaults to the value of privateKey) gives a filesystem path to a certificate (PEM format). privateKey gives a filesystem path to a a private key (PEM format). sslmethod indicates which SSL/TLS version to use (a value like TLSv1_METHOD). For example,  ssl:port=443:privateKey=/etc/ssl/server.pem:sslmethod=SSLv3_METHOD .
  • UNIX. Supported arguments: address, mode, backlog, lockfile. address gives a filesystem path to listen on with a UNIX domain socket server. mode (optional) gives the filesystem permission/mode (in octal) to apply to that socket. lockfile enables use of a separate lock file to prove the server is still running. For example,  unix:address=/var/run/web.sock:lockfile=1 .
  • systemd. Supported arguments: domain, index. domain indicates which socket domain the inherited file descriptor belongs to (eg INET, INET6). index indicates an offset into the array of file descriptors which have been inherited from systemd. For example,  systemd:domain=INET6:index=3 . See also  Deploying Twisted with systemd .

 

 

   

 

获取与端点的连接


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论