设为首页收藏本站

Erlang中文论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14567|回复: 1

关于 连接远程 节点的打印输出问题

[复制链接]
发表于 2019-10-11 17:54:06 | 显示全部楼层 |阅读模式
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.


回复

使用道具 举报

发表于 2019-12-18 15:42:04 | 显示全部楼层
把要写的日志发到别的 进程去 不应响业务进程  

io:format(IoDevice, Format, Data)   阻塞也没关系的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|Erldoc.com  

GMT+8, 2024-4-17 07:47 , Processed in 0.371238 second(s), 9 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表