Mac OS X Mountain Lion在共享系统首选项菜单中没有Web共享框。 在Web上彻底讨论了Apache服务器是可用的,并且可以在命令行中手动打开,或者使用一个方便的Prefs窗格。 这在电脑醒着的时候起作用。 但是,当我的电脑进入睡眠状态时,即使在节能程序窗格中选中了唤醒networking访问,服务器也将停止工作。 从关于Bonjour的讨论中,我发现这个问题可能是由于Apache没有在Bonjour注册的事实造成的。 这听起来可能吗? 如果没有,请提出一些build议。 连接是通过硬连线的以太网。
如果注册与Bonjour是问题,我想知道如何注册。 你给了一个很好的dns-sd的描述,命令描述是dns-sd -R Name Type Domain Port [TXT …](注册一个服务)“,但是我不知道”Name“或“types”,或域的格式。我尝试了一些dns-sd -Bsearch,并没有发现任何我可以用作模型的东西,并且它不会显示在Bonjour Browser中。
任何build议,将不胜感激。
这个问题的正确解决scheme(就像@ Zoredache指出的那样)是将服务器设置为永不hibernate。 可能有办法让它按需唤醒,但是会很慢,过于复杂,并且可能不可靠。
现在关于“唤醒networking访问”:它不唤醒任何旧的networking访问,它收到一个特殊格式的“魔术包” ,醒来时醒来。 传入的HTTP请求不是这种格式,所以他们不会做这项工作。 (注意:实际上,启动HTTP会话的TCP SYN数据包必须采用此格式,除非即使这样也不行,因为计算机在其hibernate状态下不响应ARP,所以路由器不知道如何发送SYN …)
Bonjour睡眠代理提供了一个可能的解决方法(虽然正如我上面所说,它会很慢等)。 如果您的本地networking上有提供睡眠代理服务的设备,Mac可以在代理进入hibernate状态时向其注册Bonjour广告服务。 当它睡着时,代理通过Bonjour发布您的服务,代表您的计算机响应ARP。 当某个请求(实际上是SYN数据包)进入其中一项服务时,代理会发送一个魔法数据包来唤醒您的计算机,然后将传入的连接切换到您的计算机。
我没有testing过这个,但我的理解是,要使这个工作,你需要一个设备,提供Bonjour睡眠代理服务(尽pipe显然有些Mac内置到以太网接口),然后注册一个服务的端口80与Bonjour:
dns-sd -R "some arbitrary name" _http._tcp local 80 &
请注意,“&”在后台运行; dns-sd程序必须保持运行才能保持注册生效。 另一种可能性是编辑启动的.plist文件为Apache创buildBonjour注册。 但是我不会担心,因为这不是正确的解决scheme。 正确的解决scheme是不让服务器睡在首位。