XAMPP 上的 WebSocket 无法使用端口 80 或 443

Can't use port 80 or 443 for WebSocket on XAMPP

我有一个 Windows 7 XAMPP 设置,用于快速测试 PHP 代码。我最近用 PHP WebSocket 脚本进行了 运行 测试,它在我测试过的每个端口上都能正常工作,端口 80 和 443 除外。80 和 443 都不能与 wswss 协议。当我尝试任何一个端口时,绝对没有任何东西可以通过,脚本将永远坐在那里 运行。

official WebSocket spec (RFC 6455) 状态:

The WebSocket Protocol attempts to address the goals of existing bidirectional HTTP technologies in the context of the existing HTTP infrastructure; as such, it is designed to work over HTTP ports 80 and 443 ...

并且:

By default, the WebSocket Protocol uses port 80 for regular WebSocket connections and port 443 for WebSocket connections tunneled over Transport Layer Security (TLS) [RFC2818].

并且:

The port component is OPTIONAL; the default for "ws" is port 80, while the default for "wss" is port 443.

那么我应该如何让端口 80 和 443 工作?
谢谢。


编辑:这是netstat的第一行:

我想这意味着我不能使用端口 80,对吗?

通常,此类问题意味着以下情况之一:

  1. 有些东西已经在监听这些端口;端口绑定不能被多个进程共享。
  2. 您可能需要提升权限并且没有权限在这些端口上打开侦听器(通常保留较低范围的端口)。

要查看这是否是第一个问题,请尝试使用 netstat 查看您有哪些端口的侦听器:

netstat -a -p TCP -o -n

如果是第二个问题,您可能需要调整 运行 服务器的方式,使其具有适当的权限。

在 Windows:

下启用端口共享可能有一个解决方法(我还没有尝试过)

https://msdn.microsoft.com/en-us/library/ms733925(v=vs.110).aspx

...但是使用这种设置可能很难预测行为。另一种选择是在 IIS 中设置代理(我假设这是占用您的端口 80 的原因)。

此答案最后修订时间为 2015 年 11 月 20 日美国东部时间下午 2 点。

我发现了你的问题,因为在我的 Windows 10 笔记本电脑上安装和配置 XAMPP 的设置过程与我自己的问题相似。

(我会在下面详细解释我的具体情况,但在此之前我会非常快速地总结一下你的问题。)

我 运行 XAMPP 以管理员身份通过右键单击它并选择该选项。 端口问题似乎消失了。 现在我可以通过从任务栏上的固定图标左键单击它而不指定管理员来正常打开它。 后一个结果是在 24 小时内多次重新启动计算机后出现的。 希望我确切地知道发生了什么变化以及它是如何工作的,但据我所知,它现在工作得很好。

2015 年 11 月 17 日,我在 XAMPP 控制面板中收到了一些错误。 这些错误表示类似于以下内容:

"unable to open process PID 4416" "port 80 blocked" "port 443 blocked" "you are not running as an administrator"

此外,我应该提一下,我正在完成 O'Reilly 出版的教科书第 4 版学习中第 2 章“设置开发服务器”中的步骤 PHP、MySQL, & JavaScript 与罗宾尼克松 jQuery, CSS, & HTML5。

我还发现命令提示符 "looking" 框打开了,我不知道该怎么做,所以我后来关闭了它。

然而,回到正题,特别是对我来说很重要的是设置服务器和 运行 它尽可能类似于教科书说明,所以更改默认端口号确实对我来说似乎不是一个好的选择,因为我不确定改变一件事的端口号,比如主端口,可能会影响其他端口,以及其他事情。

关于使用各种方法进行搜索以确定其他 "things" 可能会中断我的 XAMMP 尝试使用的端口,也就是我的 Apache 服务器,我也对其他一些建议感到困惑.

实际上似乎 Apache 是 PID 4416 的来源,并且根本没有使用端口 80 或端口 443。我还检查了端口 3306 是否被使用,因为教科书中提到它将是 MySQL 的默认端口,并且它没有被其他任何东西使用。

我通过转到 "Task Manager," 然后转到 "Details," 然后转到 "PID."

来检查这些 PID

然后,在我的 Windows 10 笔记本电脑中,我关闭了所有打开的 windows 任何类型,甚至是 XAMMP 控制面板。

然后,我在 "Search Windows" 栏中输入了 XAMMP。

当 XAMMP 出现时,我右键单击它并选择 运行 它作为管理员。

当以这种方法打开控制面板时,我在 XAMMP 的控制面板中没有收到任何错误消息。

但是,当我将 XAMMP 固定到我的任务栏并尝试以正常方式打开它(左键单击打开)时,我收到了很多错误。

但是,当我右键单击任务栏上固定的 XAMMP 图标,然后在弹出 XAMMP 字样时再次右键单击,然后选择 "run as administrator" 似乎没有错误。

这是一种变通解决方案。

我想这可能对某些人有帮助,但不是全部。

我希望它有助于阐明类似的问题。

我会努力彻底解决这个问题。

在这种特殊情况下,我似乎需要找到一种方法来确保 XAMMP 在打开时自动 运行 作为管理员,并且必须需要一些我还没有发现的调整。

希望对大家有所帮助! :)

我的大部分知识都基于 HTML5 和 CSS3 以及搜索引擎优化,因此我正在努力学习更多关于服务器端和动态/交互式脚本的知识。

P.S。在这个最初的问题发生后的 24 小时内,在我的笔记本电脑几次重新启动之后,我能够以正常的方式打开 XAMPP 而不会出现错误,只需左键单击我固定在任务栏上的图标即可。

我希望这也能有所帮助。 :)

祝你有美好的一天。