Erlang中文论坛

标题: 关于 连接远程 节点的打印输出问题 [打印本页]

作者: lfh    时间: 2019-10-11 17:54
标题: 关于 连接远程 节点的打印输出问题
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.



作者: dreamxyp    时间: 2019-12-18 15:42
把要写的日志发到别的 进程去 不应响业务进程  

io:format(IoDevice, Format, Data)   阻塞也没关系的




欢迎光临 Erlang中文论坛 (https://bbs.erldoc.com/) Powered by Discuz! X3.3