socket.io 忽略 url 路径似乎导致轮询 GET 404 错误
socket.io ignoring url path seems to cause polling GET 404 error
我正在尝试 运行 使用 node.js
和 socket.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'});
我正在尝试 运行 使用 node.js
和 socket.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'});