我正在尝试实现一个与节奏网类似的 Rhythmbox-plugin,但我在从插件中启动 HttpServer 时遇到了问题。
如果我像通常那样启动服务器(例如使用 make_server(...).server_forever()),插件会阻止节奏盒。所以我查看了rhythmweb,但每次我向服务器发起请求时都会出现段错误。这就是我所做的:
class WSGIRefWebServer(IDjangoWebServer):
def __init__(self, host, port, settings):
IDjangoWebServer.__init__(self, host, port, settings)
def _start_server(self):
django_handler = django.core.handlers.wsgi.WSGIHandler()
self.__server = make_server(self._host, self._port, django_handler)
self._is_running = True
def request_loop(source, cb):
self.__server.handle_request()
return True
gobject.io_add_watch(self.__server.socket, gobject.IO_IN, request_loop)
如果我用 self.__server.server_forever() 替换最后一行,一切正常,但节奏盒被阻止。
我的第二种方法是在一个新线程中启动网络服务器,它工作得很好,但是我在 django 应用程序中使用节奏盒外壳对象时遇到了一些麻烦。
所以我正在寻找一种方法来启动一个网络服务器,它不会阻止节奏盒,而是在同一个线程中运行。我不明白为什么第一种方法会导致段错误,因为韵律网也是这样做的。
我希望你能帮助我解决我的问题。
顺便说一句:我在 debian 挤压(测试)上使用 python 2.7 和节奏盒 2.97