2012-08-04 11 views
10

प्रश्न: क्या this link में उदाहरण के लिए एक तुलनीय समाधान, सिवाय होगा gevent-socketio और Socket.io.jsbottle के साथ प्रयोग कर लागू किया? मैं न्यूनतम समाधान की तलाश में हूं जो क्लाइंट से सर्वर पर एक लूप में कुछ ट्रैफिक पास करेगा और गीवेंट-सॉकेटियो, सॉकेट.ओ.जे.एस. और बोतल का उपयोग कर क्लाइंट पर वापस जाएगा।पायथन के बोतल gevent-socketio और Socket.IO.js का उपयोग कर microframework के न्यूनतम उदाहरण

पृष्ठभूमि: मैंने एक साधारण वेब-ऐप विकसित किया है जो सर्वर पर रिमोट कस्टम शैल (क्ली) के लिए वेब-आधारित टर्मिनल प्रदान करता है। ब्राउज़र (क्लाइंट) एक फॉर्म इनपुट फ़ील्ड से शेल कमांड एकत्र करता है, 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> 

प्रेरणा: मेरा मौजूदा ऐप फ़ायरफ़ॉक्स और क्रोम के नवीनतम संस्करण में बहुत अच्छा काम करता है। आईई समर्थन मौजूद नहीं है, और सफारी संगतता मिडलिन 'है। मैं आखिरकार क्लाइंट और सर्वर के बीच खोल कमांड और आउटपुट संवाद करने के लिए एक क्रॉस-ब्राउजर समाधान ढूंढ रहा हूं। अगर मेरे पास बोतल के लिए एक साधारण उदाहरण था, तो मुझे लगता है कि मैं और अधिक तेज़ी से आगे बढ़ सकता हूं।

संयोग से, मैंने 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

स्रोत कोड काफी सरल है मदद से आप बोतल के साथ एक बड़ा अनुप्रयोग का निर्माण करने के लिए शुरू करने के लिए और सॉकेटियो।

अन्यथा, मैं सलाह देता हूं कि आप 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।com/mozilla-सेवाओं/circusweb/ब्लॉब/c850fcf453dd53680885833f3e0944577e90385b/circusweb/server.py – freakTheMighty

संबंधित मुद्दे