2010-12-10 1 views
12

, 나는 추세에 주목하고 있습니다 :트위스트 및 WebSocket을 : WebSocket을에 대한 내 지속적인 호기심을 넘어 에코

웹 소켓 우주의 "안녕하세요 세계는"적어도 순간, 것 같다 "를 에코 '기능 . 즉, 시연 된 응용 프로그램은 일반적으로 "나는 무언가를 보냅니다, 나는 무언가를받습니다."

프로토콜이 기능적임을 적절히 입증하는 동안이 예제는 전통적인 요청/응답주기에서 사용할 수있는 것과 동일한 유형의 통신을 실제로 보여줍니다.

import sys 
from twisted.python import log 
from twisted.internet import reactor 
from twisted.web.static import File 
from twisted.web.websocket import WebSocketHandler, WebSocketSite 


class Echohandler(WebSocketHandler): 

    def frameReceived(self, frame): 
     log.msg("Received frame '%s'" % frame) 
     self.transport.write(frame + "\n") 


def main(): 
    log.startLogging(sys.stdout) 
    root = File(".") 
    site = WebSocketSite(root) 
    site.addHandler("/ws/echo", Echohandler) 
    reactor.listenTCP(8080, site) 
    reactor.run() 


if __name__ == "__main__": 
    main() 

어떻게 대신 여기에 "푸시"기능을 검사 할 수 있습니다 : 예를 들어

, 나는 twisted.web.websockets의 찾을 수 있습니다 (서버 측)의 유일한 데모는 다음과 같습니다? 즉, 웹 소켓을 열어 둘 수있는 방법, 그리고 나중에 어떤 이벤트가 발생했을 때 결정된 시간에이 이벤트의 영향을받는 내용 인 websocket을 통해 메시지를 보냅니 까?

(이 질문으로 관심이있는 사람들도 내가 몇 일 전에 요청으로 경쟁력이 질문 간주 될 수 있습니다 Making moves w/ websockets and python/django (/ twisted?)를)

+0

Firefox 4에서 웹 소켓을 사용할 수 없다는 것을 감안할 때 http://hacks.mozilla.org/2010/12/websockets-disabled-in-firefox-4/, 그리고 완료 되더라도 그들은 작동하지 않을 수도 있습니다. 모든 브라우저에서 양방향 브라우저 통신에 대한 더 높은 수준의 추상화를 조사하고 싶을 것입니다. 웹 소켓은 Athena http://divmod.org/trac/wiki/DivmodNevow/Athena와 Orbited http://orbited.org/와 같은 것들을 최적화하는 방법 일뿐입니다. – Glyph

+0

현재 사양 (및 지원)과 같은 뻔뻔 스럽지만 실제로는 Comet (Athena, Orbited 등)의 완전한 리메이크가 아닌 Web 소켓입니다. 지금은 모든 브라우저에서 작동 할 솔루션에 관심이 없습니다. 나는 단지 나 자신과 다른 집단 구성원들 사이에서 일할 무언가를 만들고 싶다. 우리는 브라우저와 방화벽 조건을 완전히 통제 할 것이다. – jMyles

+1

아니요, 꼭 그런 것은 아닙니다. Athena는 완벽한 고급 메시징 시스템으로 바이트 만 전송하는 것이 아닙니다. 그리고 Orbited는 여러 전송을 사용할 수 있으며 더 나은 원시 기술을 사용할 수 없다고 판단 할 때보다 원시/덜 효율적인 기술로 떨어집니다. 웹 소켓보다 * 좋은 * 것이 있으면 코드 전체를 다시 작성하지 않고도이 기능을 활용하기를 원할 것입니다. – Glyph

답변

0

상류에, 나는 웹 페이지에 텔넷 서버에서 메시지를 밀어 WebSocket을 사용 a talk at Django-NYC에서 웹 응용 프로그램을 설정하는 방법을 보여 주었다.

9

이 대신 반응가되는, 사전 될 것 업데이트 EchoHandler의 예입니다.

class ChattyHandler(WebSocketHandler): 
    def connectionMade(self): 
     self.transport.write('oh hai\n') 
     self.saysomething() 

    def saysomething(self): 
     self.transport.write('still there?\n') 
     reactor.callLater(5, self.saysomething) 

불행하게도, https://github.com/rlotun/txWebSocket/에서 WebSocket을은 connectionMade() 메소드를하지 않는 것, 대신 당신이에 연결할 수있는 유일한 것은 __init__입니다. 일반적으로 '정상적인'꼬인 프로토콜 인 경우 connectionMade()를 재정의합니다.--Fixed는 hendrix를 사용

+1

다음과 같이 TypeError가 발생합니다. * WebSocketTransport가 아닌 시퀀스이어야합니다. – jMyles

+1

TypeError fixed –

+4

https : // github을 유지 관리합니다.com/rlotun/txWebSocket/그리고'connectionMade' 훅을 추가했습니다. – rlotun