這裏是我當前的代碼:如何使用來自套接字的數據實現webpush?
#!/usr/bin/env python
from twisted.application import internet, service
from twisted.application.service import IServiceMaker, MultiService
from twisted.protocols import basic
from twisted.internet import reactor, protocol, defer
from twisted.internet.protocol import DatagramProtocol
import datetime
class WebPUSH(basic.LineReceiver):
logTemplate = '''
<script type="text/javascript">
pushHandler.addLi('%s')
</script>
'''
def __init__(self):
self.gotRequest = False
def lineReceived(self, line):
if not self.gotRequest:
self.startResponse()
self.gotRequest = True
def startResponse(self):
self.sendLine('HTTP/1.1 200 OK')
self.sendLine('Content-Type: text/html; charset=utf-8')
self.sendLine('')
f = open('index.html', 'r')
self.transport.write(''.join(f.read()))
f.close()
self.logTime()
def logTime(self):
self.sendLine(self.logTemplate % datetime.datetime.now())
#reactor.callLater(2, self.logTime)
class Echo(DatagramProtocol):
def datagramReceived(self, data, (host, port)):
WebPUSH.logTime()
print "received %r from %s:%d" % (data, host, port)
self.transport.write(data, (host, port))
if __name__ == '__main__':
f = protocol.ServerFactory()
f.protocol = WebPUSH
reactor.listenTCP(8080, f)
reactor.listenUDP(9999, Echo())
reactor.run()
正如你所看到的,我想接收數據時與回聲調用WebPUSH的方法。因爲我從來沒有真正實例化WebPUSH,所以看起來我可以很輕鬆地調用這個方法。我試圖將其轉換爲使用多服務方法,但似乎沒有工作,雖然我確信我做錯了什麼。
沒有(只要我可以谷歌)任何很好的例子在multiservice扭曲或至少這樣的一個。
任何幫助將不勝感激。
目前尚不清楚,對我來說,至少,什麼你實際上是想在這裏完成。看起來你有一個UDP協議,它連接到HTTP實現的一半,並且你對類和實例之間的區別有些困惑。我不明白'MultiService'與什麼有關。你想製作一個長輪詢的Web服務器嗎? – Glyph