動機

之前工作要架簡單的server去測,但裝一般的server還要設定有的沒的,所以用這個來偷吃步

twisted

一個方便寫network programming的framework

會遇到的理由是之前想架ftp server測試用,但是arch linux的vsftpd架不起來(居然要systemd-homed!?) 所以找到他,下面是ftp server的範例

from twisted.protocols.ftp import FTPFactory, FTPRealm
from twisted.cred.portal import Portal
from twisted.cred.checkers import AllowAnonymousAccess, FilePasswordDB
from twisted.internet import reactor

p = Portal(FTPRealm("./"), [AllowAnonymousAccess(), FilePasswordDB("pass.dat")])

f = FTPFactory(p)

reactor.listenTCP(21, f)
reactor.run()

code很短,也很好架,python+code就結束

http server(from官網)

from twisted.web import server, resource
from twisted.internet import reactor, endpoints

class Counter(resource.Resource):
    isLeaf = True
    numberRequests = 0

    def render_GET(self, request):
        self.numberRequests += 1
        request.setHeader(b"content-type", b"text/plain")
        content = u"I am request #{}\n".format(self.numberRequests)
        return content.encode("ascii")

endpoints.serverFromString(reactor, "tcp:8080").listen(server.Site(Counter()))
reactor.run()

其他還有mail, ssh, reverse-proxy等等

不過我看不懂要怎麼用,都是用範例去改 所以我都是需要什麼用twisted what-i-want去找

範例在source code的docs各個項目中的example

有教學,Twisted Introduction也有中文的

怪怪的ftp

之前把ftp server用好後,無法重現ftp傳檔的bug,但是vsftpd可以,十分的詭異

bug是連vpn用ftp經過router過一段時間就會停止傳輸最後timeout,但是用twisted的http server可以重現

ngrok

方便建https,不然要自己用public ip與reverse proxy與ssl證書(好麻煩),ngrok只要三步就搞定了

  1. 載ngrok的執行檔
  2. 辦帳號拿token
  3. ./ngrok authtoken your-token登入
  4. ./ngrok proto port
  • proto支援http, tls, tcp
  • port就是server的port
  1. 之後terminal就會顯示網址,就可以連以及有https