【发布时间】:2026-01-21 03:15:01
【问题描述】:
有什么方法可以从 Erlang 中的套接字读取整行,还是我需要在 gen_tcp:recv 之上手动实现行缓冲?
【问题讨论】:
-
我认为这会有所帮助 - *.com/questions/5081298/…
标签: erlang
有什么方法可以从 Erlang 中的套接字读取整行,还是我需要在 gen_tcp:recv 之上手动实现行缓冲?
【问题讨论】:
标签: erlang
您是否尝试过使用
inet:setopts(Socket, [{packet, line}])
见:http://www.erlang.org/doc/man/inet.html#setopts-2
干杯!
【讨论】:
不需要自己实现行缓冲。
gen_tcp:listen/2 接受 {packet, line} 作为其 Options 参数,这会将套接字置于行模式,因此对 gen_tcp:recv 的调用将阻塞,直到读取完整的行。
gen_tcp:listen(Port, [{packet, line}])
确保通过{buffer, Size} 选项为同一个调用(或inet:setopts/2)设置的缓冲区大小足够大,可以容纳所有行,否则它们将被截断。
或者,如果使用 Elixir,这应该可以帮助您入门:
:gen_tcp.listen(port, [packet: :line, buffer: 1024])
【讨论】: