我正在尝试在我的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!)
答案 0 :(得分:0)
您可能需要在socket.io脚本标签上加一个斜杠。
最重要的提示是,您说socket.io
脚本在页面URL为https://example.net/dashboard时加载,而在https://example.net/user/fludo时不加载。并且,该屏幕截图显示了它试图从https://example.net/user/fludo/socket.io/socket.io.js
加载脚本,这确实是错误的路径。
问题是您的<script>
标签使用的是页面相对链接,URL上没有前导/
。这意味着浏览器将页面URL的路径与<script>
标记中的文件名结合在一起。但是,您不想使用页面的路径。您希望每次都从同一位置加载它。因此,为此,您需要进行以下更改:
<script src="socket.io/socket.io.js"></script>
对此:
<script src="/socket.io/socket.io.js"></script>