将erlang套接字存储到数据库
Posted
技术标签:
【中文标题】将erlang套接字存储到数据库【英文标题】:Store erlang socket to database 【发布时间】:2019-05-31 18:31:11 【问题描述】:我需要将套接字存储到数据库中, gen_tcp:accept 返回类似
#Port<0.5>
我可以使用 io_lib:format 将其转换为位串
["Port<0.5>"]
要将其存储到数据库中,但如何将其转换回原始状态以使用它来发送和接收数据?
更新:
我试过term_to_binary
但mysql-otp 插入失败所以我做了binary_to_list(term_to_binary(Socket))
,它插入得很好但在二进制文件的开头添加了额外的 > 到数据库中,任何解决方案?为什么会这样?如果它没有添加额外的数据,我可以使用binary_to_term
将其转换回来。
【问题讨论】:
您好,欢迎来到 Erlang!我认为你在逆流而上。想要将套接字句柄存储到数据库中似乎是一种“设计气味”。拥抱 Erlang,而不是试图让 Erlang 适应你用另一种语言做某事的方式:-) 它是一个聊天服务器,我需要存储在线用户套接字,在变量中存储大量套接字不是一个好主意,是吗?我对此感到担忧,但不幸的是,在堆栈溢出问题上提出这些问题会导致投票过于宽泛,并禁止发布未来的问题。 字典能很好地处理数千个套接字吗? 我看到了使用列表的担忧,当然,在这种情况下这不是一个好方法。您可以使用例如 ETS,它是内置的,不需要任何转换。但对于这类问题,我建议在 Erlang 邮件列表或 Slack 频道上提问。 感谢您宝贵的时间和建议,我非常感谢。 【参考方案1】:我将 varchar 更改为 varbinary,现在我可以直接将 term_to_binary
插入数据库,然后使用 binary_to_term
重用它。
【讨论】:
以上是关于将erlang套接字存储到数据库的主要内容,如果未能解决你的问题,请参考以下文章