许多项目/网站,一个服务器框架

时间:2018-06-04 19:16:27

标签: python server

我有很多非静态网站,每个网站都使用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以外的框架。

0 个答案:

没有答案