嘿伙计们我打算让我的网络服务器与dbus信号接收一起工作。 webserver与gevent.WSGIServer一起运行,因为我需要websocket的支持,而dbus是通过python-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()
答案 0 :(得分:0)
您可以在另一个线程中运行其中一个主循环。