defmodule TwittEx.PageController do
require IEx
use TwittEx.Web, :controller
def index(conn, _params) do
text conn, "hello"
"dummy string so text/2 isn't returned"
end
end
我来自Rails,了解控制器应该做什么,但无法理解凤凰城的魔力是如何发生的。 Elixir是无状态的,因此无法修改conn
和_params
。 text conn, "hello"
如何记住“你好”,因为我没有从索引中返回它。
我怀疑还有另一个流程可以跟踪响应。如果是这样,这是否意味着单个vanilla请求具有多个进程。
答案 0 :(得分:2)
text conn, "hello"
如何记住"你好"因为我不能从索引中退回。
它没有!在您致电conn
后,响应(在这种情况下为" hello")会立即写入text
。您可以使用以下方法对其进行测试:
def index(conn, _params) do
:timer.sleep(1000)
conn = text conn, "hello"
:timer.sleep(5000)
conn
end
如果您访问此页面,您只需1秒钟即可看到响应,而不是6秒。
如果您尝试在text
返回的新conn
上致电text
,则新结构会出现Plug.Conn.AlreadySentError
错误state
是:sent
。如果你尝试在同一个conn
上调用它两次,那么没有错误,第二次写入被忽略。我非常确定插件处理程序有责任忽略第二次写入,因为我刚验证Plug
只是再次调用处理程序send_resp
。< / p>