【问题标题】:Erlang gen_tcp:recv socket closingErlang gen_tcp:recv 套接字关闭
【发布时间】:2023-04-07 04:10:01
【问题描述】:

我正在使用 websockets 和 MQTT 进行项目。 Websocket 服务器从 mqtt 接收 4 条消息,我让它循环接收任何其他消息。但是,如果没有消息,Encoded_fixed_header = gen_tcp:recv(Socket, 0) 会给出错误,因为没有要接收的消息。我对 gen_tcp:recv 做了一些研究,它说它会无限等待一条消息,但似乎不是,它关闭了套接字。

recieve(Socket,WsPID) ->
    Encoded_fixed_header = gen_tcp:recv(Socket, 0),
    Length = gen_tcp:recv(Socket, 0)
    Variable_Header = gen_tcp:recv(Socket, 0),
    Playload=gen_tcp:recv(Socket, 0),
    recieve(Socket,WsPID).

可能是什么问题?

【问题讨论】:

    标签: sockets websocket erlang mqtt gen-tcp


    【解决方案1】:

    在启动服务器时检查 gen-tcp:listen/2 中的 active 参数的值,如果使用默认值,则检查 inet_default_connect_options 中的值。

    【讨论】:

    • 我使用 False 作为 active 的值:{ok, Socket} = gen_tcp:connect("localhost", 1885,[binary, {packet, 0},{active,false},{exit_on_close, false}]) 我认为这是我应该设置的值。
    • 由于您的代码显式调用gen_tcp/recv/2 来获取新消息,因此您应该将 active 选项设置为 false。 Active true 用于在调用gen_tcp:connect/2 的进程的接收块中直接接收传入消息。然后请注意,当您在每次调用接收函数时删除返回值时,您的代码将不会产生任何结果。
    • 你可以在那里找到一个很好的教程 [learnyousomeerlang.com/buckets-of-sockets](LYSE)
    猜你喜欢
    • 2015-12-07
    • 2012-08-14
    • 2015-09-04
    • 2018-06-24
    • 2016-06-17
    • 2011-04-16
    • 1970-01-01
    • 2014-07-11
    • 1970-01-01
    相关资源
    最近更新 更多