【发布时间】:2019-08-14 04:13:29
【问题描述】:
我正在尝试在我的 Web 应用程序中使用 Socket.IO,到目前为止效果很好。但是,很长一段时间以来,我一直在尝试解决一个特定问题,但找不到其他人遇到同样的问题。 Socket.IO 在只是 site.com/example 的 URL 上工作得很好,但是,当我在域上堆叠路径时,我在 socket.IO 中得到一个 404。例如,site.com/user/example 为 socket.IO 显示 404。在日志中,当它需要访问 site.com/socket.io 时,它会尝试访问 site.com/user/socket.io/... 的 socket.IO。它似乎只在最后一个 / 之后替换 url,因此 site.com/ex/a 会使其尝试在 site.come/ex/socket.io 获取 socket.io。(我正在使用 ExpressJS,我不知道如果那是相关的。)
我已尝试设置 socket.io 的路径和资源以在客户端脚本中使用。另外,我在将 socket.io 实例绑定到 http 服务器时包含了路径。
这是我的服务器端代码。
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io')(server, {path: '/socket.io'});
这是我的客户端代码。
var socket = io.connect('https://example.net', {
path: '/socket.io',
resource: '/socket.io',
transports: ['websocket'],
upgrade: false
})
非常感谢大家的帮助! (我很抱歉这个问题的格式不正确,这是我第一次在 StackOverflow 上提问!)
【问题讨论】:
-
建立 socket.io 连接时是否出错?还是socket.io客户端
<script>标签上的错误?如果是<script>标签,请显示您正在使用的脚本标签,因为它也必须使用您的路径。 -
仅供参考,我不知道您对
resource选项对io.connect()有什么期待,因为我在 the socket.io docs 中看不到这一点。 -
@jfriend00 我的头文件中包含一个 .js 脚本,它包含在我的所有其他文件中。因此, header.ejs 包含在
<%- include header %>中。我刚刚在一个网站上看到了资源选项,迫不及待地想尝试一下。这是错误的 Chrome 控制台。 ibb.co/cg0wXRj 如您所见,这些错误出现在 example.net/user/fludo 上,但不会出现在诸如 example.net/dashboard 这样的 URL 上。 -
请告诉我实际的
<script>标签,它包含在您的标头模板中的socket.io。我猜它需要一个领先的/在路径上。没有它,它只适用于没有路径的顶级 URL。 -
@jfriend00 非常感谢!我不敢相信我没有考虑到这一点。从 ``` ``` 更改为 ``
标签: javascript node.js express socket.io