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

Kon*_*adi 1 .htaccess url-rewriting subdirectory node.js socket.io

我正在尝试使用node.js和运行聊天脚本socket.io。我遵循了 socket.io 网站上的教程,让它在我的本地 Windows 节点服务器上运行http://localhost:3000得很好。

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

RewriteEngine On
RewriteRule ^chat/(.*) http://localhost:54321/$1 [P]
Run Code Online (Sandbox Code Playgroud)

所以我的聊天脚本可以在 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
Run Code Online (Sandbox Code Playgroud)

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

http://www.example.com/chat/socket.io/?EIO=3&transport=polling&t=1439208895332-0
Run Code Online (Sandbox Code Playgroud)

这行得通!

但是我怎样才能让 socket.io 为它的请求实际使用正确的路径/url?

Hyo*_*yun 5

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

var socket = io('http://example.com', {path: '/chat/socket.io'});
Run Code Online (Sandbox Code Playgroud)