io:format(IoDevice, Format, Data) 决定了输出到何处。
正常的 io:format(Format, Data) 默认输出是 erlang:group_leader(),就是该进程的 小组领导。
所以接收 远程节点的 io:format 输出, 只要把 本地连接节点的 erlang:group_leader() 告知远程节点,让远程节点发过来即可。
这其中存在一个问题,自带的 io:format(IoDevice, Format, Data) 是阻塞的,对远程节点来说是个比较大的负担。
远程发送打印时可以对 io:format 进行更改, 改成 只发送不管结果, 负担就大幅度减小。
下面直接贴上改进代码:
io_format(Pid, Format, Args) ->
case net_kernel:dflag_unicode_io(Pid) of
true -> Req = {put_chars,unicode,io_lib,format,[Format,Args]};
false -> Req = {put_chars,io_lib,format,[Format,Args]}
end,
Pid ! {io_request, self(), null, Req},
ok.
|