使用 Twisted 框架进行网络编程,第 4 部分
2008-11-13 13:13:47 来源:WEB开发网这个客户机的整体结构与我们已经见过的大多数 Twisted 应用程序类似。它首先创建协议,然后在一个异步循环(换句话说就是在 reactor.run() 中)中监视是否有事件发生。
有趣的部分出现在 Channel() 的方法中。通道一旦打开,我们就执行一条定制的命令 -- 本例中是 Weblog 文件中的一条 tail -f 命令,其名称在命令行中指定。这时主机依旧完全是一个一般的 sshd 服务器,而不具有任何 Twisted 特征,它自然而然地会开始发送回一些数据。数据一旦到达, dataReceived() 方法就会对其进行解析(随着 tail 产生更多数据,这个过程也在不断进行)。对于这个特定的客户机而言,我们根据解析出来的 Weblog 的实际内容来决定何时结束 -- 这就相当于一种基于 Web 杀死监视程序的方法。虽然那种特定的配置可能并不常见,但是这个例子还是能够说明如何在某种条件(可以是任何条件)成立的情况下切断连接的基本概念。会话过程如下:
清单2. Weblog 监视器会话实例
$ ./ssh-weblog.py gnosis@gnosis.cx access-log
host key fingerprint: 56:54:76:b6:92:68:85:bb:61:d0:f0:0e:3d:91:ce:34
password:
http://gnosis.cx/publish/ --> /publish/whatsnew.html
http://gnosis.cx/publish/whatsnew.html --> /home/hugo.gif
Bye bye...
这与本系列文章中创建的其他 Weblog 监视器几乎完全一样。当从另一个窗口中让浏览器转向 <http://gnosis.cx/kill-weblog-monitor> 的时候,上面的会话就结束了(否则,它就会无限期的监视下去)。
修改SSH客户机
如果是出于其他的目的而创建另外的SSH客户机,也是一件很简单的事情。例如,我可以将 ssh-weblog.py 拷贝为 scp.py,并只对代码进行一些修改。 _main_ 主体中解析选项的方式就有些不同,docstring 也进行了调整;此外,我还简单地修改了一下 .dataReceived() 方法,让它来读取数据:
更多精彩
赞助商链接