socket.io 忽略 url 路径似乎导致轮询 GET 404 错误

socket.io ignoring url path seems to cause polling GET 404 error

我正在尝试 运行 使用 node.jssocket.io 的聊天脚本。我已经关注 the tutorial on the socket.io website 并在我的本地 Windows 节点服务器 http://localhost:3000 上将其发送到 运行 就好了。

现在我将项目转移到将使用 port 54321 的网络服务器上。因为服务器是 运行 一个 Apache 网络服务器,所以我需要使用 .htaccess 文件将请求重定向到 node.js 服务器:

RewriteEngine On
RewriteRule ^chat/(.*) http://localhost:54321/ [P]

所以我的聊天脚本可以在 http://www.examle.com/chat/

该网站将在浏览器中正常打开,所有 HTML 都在那里。但是 socket.io 功能不起作用。控制台(浏览器、客户端)显示以下错误消息:

GET http://www.example.com/socket.io/?EIO=3&transport=polling&t=1439208895332-0 404 File not found

我在 SO 上看到过类似的问题,它们具有相同的 404 问题。答案主要是关于服务器 index.js 中变量的正确顺序。我尝试了这些解决方案只是为了确定,但它们没有帮助。因为该脚本在我的本地服务器上运行(url 中没有任何子目录),所以我认为它可能有所不同。奇怪的是,客户端 socket.io 脚本似乎忽略了请求中的子目录 /chat/。如果我尝试使用其中的 /chat/ 从 GET 请求手动打开 URL,它确实会给我回复!

http://www.example.com/chat/socket.io/?EIO=3&transport=polling&t=1439208895332-0

这行得通!

但是我怎样才能让 socket.io 实际使用正确的 path/url 来满足其请求?

在客户端,您可以将路径设置为一个选项:

var socket = io('http://example.com', {path: '/chat/socket.io'});