【发布时间】:2016-01-04 05:05:04
【问题描述】:
我正在尝试使用 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 发回给用户(我的手机),以便他们可以连接到正确的服务器。 Loopback 不行....
当前代码
我要感谢所有的回复。是的,我注意到 Lol4t0 刚过完年的评论。所以我改变了我的代码来反映这一点。为像我这样的慢人发帖。我必须绞尽脑汁才能让这些东西点击。
hd([Addr || {_, Opts} <- Addrs,
{addr, Addr} <- Opts,
{flags, Flags} <- Opts,
lists:member(loopback,Flags) =/= true]).
【问题讨论】:
标签: erlang