2012-08-04 3 views
10

질문 :은 무엇을 제외하고, this link의 예와 유사한 해결책이 될 것입니다 bottlegevent-socketioSocket.io.js를 사용하여 구현? 나는 클라이언트에서 서버로 루프에서 약간의 트래픽을 전달하고 gevent-socketio, Socket.io.js 및 bottle을 사용하여 클라이언트로 다시 전달할 최소한의 솔루션을 찾고있다.gevent-socketio 및 Socket.IO.js를 사용하여 파이썬의 병 microframework의 최소한의 예를

배경 : 나는 서버의 원격 사용자 정의 쉘 (cli)을위한 웹 기반 터미널을 제공하는 간단한 웹 응용 프로그램을 개발했습니다. 브라우저 (클라이언트)는 양식 입력 필드에서 쉘 명령을 수집하고 웹 소켓을 통해 명령을 쉘에 명령을 제공하는 geventwebsocket.WebSocketHandler 처리기를 통해 요청을 처리하는 gevent.pywsgi.WSGIServer으로 전달하고 소켓을 통해 출력을 비동기식으로 textarea 필드를 클라이언트의 브라우저에있는 양식으로 가져옵니다.

http://bottlepy.org/docs/dev/async.html#finally-websockets

중복 여기 제공 :

example_server.py :

from bottle import request, Bottle, abort 
app = Bottle() 

@app.route('/websocket') 
def handle_websocket(): 
    wsock = request.environ.get('wsgi.websocket') 
    if not wsock: 
     abort(400, 'Expected WebSocket request.') 

    while True: 
     try: 
      message = wsock.receive() 
      wsock.send("Your message was: %r" % message) 
     except WebSocketError: 
      break 

from gevent.pywsgi import WSGIServer 
from geventwebsocket import WebSocketHandler, WebSocketError 
server = WSGIServer(("0.0.0.0", 8080), app, 
        handler_class=WebSocketHandler) 
server.serve_forever() 

client.html이이 병 팀에서 제공하는 좋은, 약간의 예를 기반으로 :

<!DOCTYPE html> 
<html> 
<head> 
    <script type="text/javascript"> 
    var ws = new WebSocket("ws://example.com:8080/websocket"); 
    ws.onopen = function() { 
     ws.send("Hello, world"); 
    }; 
    ws.onmessage = function (evt) { 
     alert(evt.data); 
    }; 
    </script> 
</head> 
</html> 

동기 부여 : 내 기존 앱은 최신 버전의 Firefox와 Chrome에서 잘 작동합니다. IE 지원은 존재하지 않으며 Safari 호환성은 middlin '입니다. 궁극적으로 클라이언트와 서버 간의 셸 명령 및 출력을 전달하기위한 크로스 브라우저 솔루션을 찾고 있습니다. 병에 대한 간단한 예제가 있다면 앞으로 더 빨리 나아갈 수 있다고 생각합니다.

덧붙여, 나는 gevent-socketio examples 심지어 a bottle example 보았다, 그러나이 모든 예제 나 응용 프로그램의 도약을하기 위해 위의 간단한 예에서 너무 다르다. (gevent-socketio 예제는 내가 익숙한 병 애플 리케이션과 같이 보이지 않는다. 병 예제는 실제로 클라이언트와 통신하는 방법을 보여주지 않는다.)

고마워! :)

답변

2

Circus! zmq 위에 구축 프로세스 주자 및 감시자는, 웹 인터페이스에 대한 병을 사용하고 socketio :

https://github.com/mozilla-services/circus/blob/master/circus/web/circushttpd.py https://github.com/mozilla-services/circus/blob/master/circus/web/server.py

소스 코드는 간단하다 당신이 병 더 큰 응용 프로그램을 구축하기 시작하는 데 도움을 및 socketio.

그렇지 않으면 sockjs으로 이동하라는 조언을드립니다. 이것은 다른 백엔드에 대한 더 나은 지원과 함께보다 일반적인 구현입니다.

이 다른 스레드가 당신을 도울 수있다 : 지금 깨진 제공 SockJS or Socket.IO? Worth to recode ajax-based page?

+0

링크를. 파일은 https://github.com/mozilla-services/circus-web/blob/c850fcf453dd53680885833f3e0944577e90385b/circusweb/circushttpd.py https : // github에서 찾을 수 있습니다.co.kr/mozilla-services/circus-web/blob/c850fcf453dd53680885833f3e0944577e90385b/circusweb/server.py – freakTheMighty

관련 문제