여기에 내 현재 코드 :소켓에서 오는 데이터로 웹 퍼시를 달성하려면 어떻게해야합니까?
#!/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를 실제로 인스턴스화하지 않기 때문에이 메서드를 쉽게 호출 할 수있는 것처럼 보이지 않습니다. 멀티 서비스 방식을 사용하기 위해 이것을 변환하려고 시도했지만, 뭔가 잘못하고 있다고 확신하지만 작동하지 않는 것 같습니다.
(내가 할 수있는 한) 여러 가지 서비스가 좋은 예가 아닙니다.
도움이 될 것입니다.
, 나에게, 적어도, 무엇을 당신은 실제로 여기에서 성취하려고합니다. HTTP 구현의 절반에 연결된 일종의 UDP 프로토콜이 있고 클래스와 인스턴스의 차이점에 대해 혼란스러워 할 것 같습니다. 나는'MultiService'가 무엇과 관련이 있는지 이해하지 못합니다. 긴 폴링 웹 서버를 만들려고하십니까? – Glyph