我有很多非静态网站,每个网站都使用Tornado框架,例如:
from tornado.web import RequestHandler
from tornado.web import RedirectHandler
from tornado.web import StaticFileHandler
from tornado.websocket import WebSocketHandler
class SocketHandler (WebSocketHandler):
def on_message(self, message):
...
class JSHandler (RequestHandler):
""" This is to render script.js, passing in the host url """
def get(self):
self.render("js/script.js", host=self.request.host)
def make_app():
return Application(
[
url(r'/mySocket', SocketHandler, {} , name = "a"),
url(r'/js/script\.js', JSHandler, {}, name = "c"),
url(r'/?', RedirectHandler, { "url": "index.html" }),
url(r'/(.*)', StaticFileHandler, { "path": "files" })
],
)
def server_kickoff():
application = make_app()
application.listen(8003)
IOLoop.current().start()
对于每个项目,我都有一个框架侦听的不同端口号。
有这么多项目,我发现如果我只运行一个监听器会更容易。
实现此目的的一种可能方法是从每个项目中获取ONE侦听器导入处理程序类。目录结构看起来像
central-server.py
project1folder
project2folder
...
,文件可能包含
from project1folder.main import JSHandler as JSHandler1
url(r'/proj1/script.js', JSHandler1),
我不喜欢这个解决方案有两个原因。 (1)central-server.py成为我的顶级python文件,迫使我在我的项目中使用相对导入,这违反了Python的最佳实践。 (2)如果我正在进行项目和故障排除,我可能现在要退出并重新启动所有项目的服务器。
还有其他人想过这个问题吗?有优雅的解决方案吗?我不介意使用Tornado以外的框架。