0
嘿,我打算讓我的網絡服務器與dbus信號接收工作。該webserver與gevent.WSGIServer一起運行,因爲我需要websocket的支持,而dbus是通過python-dbus包處理的。如何在網絡服務器永久運行時接收dbus信號?
的問題是:
- 網絡服務器總是有一個事件循環運行下去,然而, 接收DBUS信號,蟒-DBUS需要另一個事件循環(這是 主循環)來運行永遠爲好。
- 我不能讓網絡服務器運行,同時保持偵聽 到dbus信號。
這裏是我的代碼:
if __name__ == '__main__':
log = logging.getLogger('Rocket.Errors')
log.setLevel(logging.INFO)
log.addHandler(logging.StreamHandler(sys.stdout))
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
bus = dbus.SystemBus()
app = Bottle()
# Register the dbus recieve handler
#bus.add_signal_receiver(hostHeartBeatSignal)
bus.add_signal_receiver(testSignal)
**This will block the webserver from running!!!!!!!!**
mainloop = gobject.MainLoop()
mainloop.run()
@app.route('/websocket', skip = True)
def handle_websocket():
print "Entering websocket handling"
wsock = request.environ.get('wsgi.websocket')
if not wsock:
abort(400, 'Expected WebSocket request.')
while True:
try:
message = wsock.receive()
print "Message received"
wsock.send("Your message was: %r" % message)
print "Message sent"
except WebSocketError:
break
default_cert = os.path.join(sys.prefix, 'share',
os.path.basename(__file__), 'cert.pem')
from gevent.pywsgi import WSGIServer
from geventwebsocket import WebSocketError
from geventwebsocket.handler import WebSocketHandler
server = WSGIServer(("0.0.0.0", 443), app, keyfile = default_cert,
certfile = default_cert,
handler_class=WebSocketHandler)
server.serve_forever()
雖然你沒有拒絕對問題的評論,但它不是一種很好的表達方式。最好等到你有適當的評論聲望 – Nehal