我正在编写一个适用于Mac和Windows的Go应用程序,它会在网络发生变化时执行一些操作(客户端从Wi-fi 1移动到Wi-fi 2,或者从3G移动到局域网)。我知道有一种在mac上运行的应用程序使用swift语言的解决方案,但我想在这里寻找一种平台无关的解决方案。
到目前为止,我已经尝试检查接口上的事件,但我不确定这是否足够。
我希望在网络变化(从Wifi-1移动到Wifi-2、3G或LAN)时,我的Go应用程序应该能够知道采取一些行动。
发布于 2019-03-27 20:52:59
我怀疑是否会有这样的解决方案。
每个试图为固有的操作系统相关问题提供与平台无关的解决方案的项目,都不可避免地将特定于平台的细节隐藏在公共API后面。看看https://github.com/fsnotify/fsnotify就是一个很好的例子。
所以,我会走这条路,并放置一个包,它将有两个特定于平台的“后端”,这两个后端将使用build标记进行有条件的编译。
要获得有关Windows下网络相关事件的通知,您可能应该启动here。不幸的是,这些东西是面向COM的,但您可以使用https://github.com/go-ole/go-ole来帮助实现这一点。
您还可以询问一个标记为winapi的非Go特定问题,询问连接到内核以获得有关网络可用性的通知的最佳方式。
发布于 2019-06-18 17:33:02
没有平台不可知的解决方案存在,但是像OSx,Linux,Windiws这样的平台有方法获得具有平台特定限制的网络事件。
OSx:AF_ROUTE类型的原始套接字SOCK_RAW可用于检测用户机器中发生的任何网络事件。可以检测到各种类型的网络事件。This thread talk about an example on BSD for network event
Windows :Windows将其作为iphlpapi库的一部分给出。像NotifyAddrChange,NotifyRouteChange这样的API允许你拥有几乎所有的网络事件(除了度量变化等) this git repo有一个工作示例NotifyAddrChange,它在接口关闭或启动时返回和事件。
Linux :在Linux netlink套接字中,允许用户空间应用程序使用netlink套接字接收网络事件。
https://stackoverflow.com/questions/55369964
复制相似问题