2012-08-04 71 views
10

Câu hỏi: Điều gì sẽ là một giải pháp có thể so sánh với ví dụ ở this link, ngoại trừ thực hiện sử dụng gevent-socketioSocket.io.js với bottle? Tôi đang tìm các giải pháp tối thiểu mà sẽ chỉ đơn giản là vượt qua một số lưu lượng truy cập trong một vòng lặp từ khách hàng đến máy chủ và trở lại khách hàng bằng cách sử dụng gevent-socketio, Socket.io.js, và chai.dụ tối thiểu của microframework chai Python sử dụng gevent-socketio và Socket.IO.js

Bối cảnh: Tôi đã phát triển một ứng dụng web đơn giản cung cấp thiết bị đầu cuối dựa trên web cho trình bao tùy chỉnh từ xa (cli) trên máy chủ. Trình duyệt (client) thu thập các lệnh shell từ một trường đầu vào biểu mẫu, chuyển lệnh qua một socket web tới một yêu cầu gevent.pywsgi.WSGIServer xử lý các yêu cầu thông qua trình xử lý geventwebsocket.WebSocketHandler, cung cấp lệnh cho trình bao, trong khi trả về đầu ra không đồng bộ thông qua socket đến trường textarea trong một biểu mẫu trong trình duyệt của khách hàng. Này được dựa trên một lớn, ví dụ nhỏ được cung cấp bởi đội chai:

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

cung cấp ở đây để dự phòng:

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> 

Động lực: Ứng dụng hiện có của tôi hoạt động tốt trong phiên bản mới nhất của Firefox và Chrome. Hỗ trợ IE không tồn tại và khả năng tương thích của Safari là middlin '. Tôi cuối cùng đang tìm kiếm một giải pháp cross-browswer để truyền đạt các lệnh shell và đầu ra giữa máy khách và máy chủ. Nếu tôi có một ví dụ đơn giản cho chai, tôi nghĩ rằng tôi có thể di chuyển về phía trước nhanh hơn.

Ngẫu nhiên, tôi đã xem gevent-socketio examples và thậm chí a bottle example, nhưng tất cả các ví dụ này quá khác so với ví dụ đơn giản ở trên để tôi thực hiện bước nhảy vọt trong ứng dụng. (Các ví dụ về gevent-socketio không có gì giống như các ứng dụng chai, mà tôi quen thuộc. Và, ví dụ chai không thực sự cho thấy cách giao tiếp với khách hàng.)

Cảm ơn! :)

Trả lời

2

Circus! Á hậu xử lý và quan sát được xây dựng trên zmq, sử dụng chai và socketio cho các giao diện web:

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

Mã nguồn có đủ đơn giản để giúp bạn để bắt đầu xây dựng một ứng dụng lớn hơn với chai và socketio.

Nếu không, tôi khuyên bạn nên chuyển đến sockjs! thực hiện chung chung hơn với hỗ trợ tốt hơn cho các chương trình phụ trợ khác nhau.

thread khác này có thể giúp bạn: SockJS or Socket.IO? Worth to recode ajax-based page?

+0

Các liên kết được cung cấp bị phá vỡ ngay bây giờ. Bạn có thể tìm thấy các tệp tại đây: https://github.com/mozilla-services/circus-web/blob/c850fcf453dd53680885833f3e0944577e90385b/circusweb/circushttpd.py https: // github.com/mozilla-services/circus-web/blob/c850fcf453dd53680885833f3e0944577e90385b/circusweb/server.py – freakTheMighty

Các vấn đề liên quan