我正在尝试使用Redis完成负载均衡/登录服务器/游戏服务器的设置,其中一部分是负载均衡。在我的Redis负载均衡实例中,我使用有序集合。键是应用程序名称,成员是游戏服务器的IP地址。
这里出现了问题。我想在erlang中使用公共方法,但找不到符合我的需求的东西。我想知道是否有什么我忽略了的东西。
{ok, L} = inet:getif(),
IP = element(1, hd(L)),
能够给我我想要的东西。我相信目前它是{192,168,0,14}。但该函数不是“公共的”。
{ok, Socket} = gen_tcp:listen(?PORT_LISTEN_GAME, [{active,once}, {reuseaddr, true}]),
{ok, {IP, _} = inet:sockname(Socket),
给我 {0,0,0,0}。我尝试了
inet:getaddr("owl")
,它给了我 {127,0,1,1}。我只能通过TCP发送消息并使用
inet:peername(Socket)
吗?看起来要做这么简单的事情需要很多步骤。我的应用程序的所有不同部分都在同一台计算机上进行测试。它会给我返回{127,0,0,1}吗?那行不通。我需要将IP地址发送回用户(我的手机),以便他们可以连接到正确的服务器。回环是不行的...
当前代码
感谢所有的回复。是的,我注意到Lol4t0在新年后的评论。所以我改变了我的代码来反映这一点。为像我这样的慢人发布这个。我必须费一些脑筋才能让这些东西点击。hd([Addr || {_, Opts} <- Addrs,
{addr, Addr} <- Opts,
{flags, Flags} <- Opts,
lists:member(loopback,Flags) =/= true]).
lo0
这样的接口名称。 - Adam Lindberg