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-socketio và Socket.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! :)
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