python - 在 Python/Tornado 中返回(传递)函数调用?

标签 python model-view-controller tornado

所以我正在用 python 为基于网络的游戏创建后端。目前它的工作原理如下...

WebSocket Handler receives message...

WebSocket Handler calls message handler...

Message Handler calls Game class functions...

Game class calls other classes to update information.

这是高度耦合的,可能应该采用模型- View - Controller 格式。所以我最终要改变这一点。

基本上我希望它像这样工作。

Controller has open a WebSocket Handler.

WebSocket Handler returns to Controller a (1?).

Controller uses (1?) calls Message Handler.

Message Handler returns to Controller a (2?).

Contoller uses (2?) to call Model.

Model sends updates to appropriate places.

所以这里有两个问题。

  1. 首先,当我在 WebSocket Handler 中收到一条消息时,它是 Tornado 的 WebSocketHandler 的一个实例,并且我不确定如何将任何内容返回到 Controller。难道这根本不可能吗?我是否必须在 WebSocket 处理程序和消息处理程序之间保持少量耦合?我知道我总是可以在 Controller 中调用函数,但这似乎不是一个实际的修复,只是更多的函数调用。

  2. 有没有办法在 python 中传递函数调用,同时跟踪它的参数?这将是执行此操作的最佳方法,但我不认为它是用 python 语言实现的。否则,我觉得最好的方法是返回一个字典,其中包含要调用的函数名称的字段和参数的字段。这当然是更多的代码。如果可以避免,我愿意,但我不确定该采取什么方向。

感谢大家的提示,这是一次很大的重构,我真的很紧张从哪里开始。

最佳答案

对于问题的第二部分,我相信您想使用部分函数。

查看:http://docs.python.org/2/library/functools.html

基本上你会去:

from functools import partial

function_call(partial(future_function_call, future_argument))

关于python - 在 Python/Tornado 中返回(传递)函数调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19472563/

相关文章:

python - 如何在Python抽象语法树(AST)中获取实际的用户定义变量名称?

python - 在 Django 中显示数据

javascript - 将 json 数据转换为强类型 View

django - 让 Tornado 听 Django 的声音

python - Tornado Web 应用程序中的 Unicode 字符串

python - 为什么在 Tornado 服务器 Post 方法中创建线程会出现运行时错误?

python - pandas' `str.extract()` 中带有捕获组的正则表达式的预期行为

python - 在两个相关类中使用继承的最佳方式是什么

java - 如何在 Spring MVC 中为不存在的资源设置 url 映射?

.NET MVC 和在页面之间安全地传递数据