更改 Socket.IO 静态文件服务路径

23
我在Node服务器上使用Socket.IO和基本的HTTP服务器(没有Express或Connect等)。默认情况下,Socket.IO将客户端文件提供给:

/socket.io/socket.io.js

我想能够将基础路径更改为其他内容,例如:

/foo/bar/socket.io/socket.io.js

有没有内置的方法可以做到这一点,或者有没有不改变Socket.IO代码的方法?我认为答案在Static模块(require('socket.io').Static))中,但除了编写自己的模块以替换默认模块之外,我看不到任何更改它的方法。
如何做到这一点?
4个回答

27

resource选项允许您配置socket.io的根目录。默认为/socket.io

var io = require('socket.io').listen(app, { resource: '/foo/bar/socket.io' });

请注意,此设置还会影响socket.io的端点服务位置,因此您还必须在客户端代码中更改此设置

var socket = io.connect('http://example.com', { resource: 'foo/bar/socket.io' });

(注意,出于某种原因,我们这里不使用前导斜杠。)


4
针对那些刚刚接触该主题的人,本文适用于1.0版本之前。对于1.0版本之后,请参见此答案链接:https://dev59.com/o2cs5IYBdhLWcg3wdz1m#25438603。 - Kevin B

19

我更改了代码,现在我的控制台日志显示有过多的GET调用,我可能做错了什么吗? - Josh

11
如果您正在使用socket.io1.0版本,则配置与以前的版本不同。
对于客户端:
var socket = io.connect('http://localhost:8888', { path: '/some/path/socket.io' });

对于服务器端

    var socket = require("socket.io")( { resource: '/some/path/socket.io' });

2

您可以在路径node_modules/socket.io/node_modules/socket.io-client/dist中找到客户端脚本socket.io.js。将其复制到一个新文件夹中,并从客户端以正确的路径调用它。

<script src="/your/path/to/socket.io.js"></script>

如需更多配置,请访问维基页面


这是唯一对我有效的方法。我的node.js文件与静态的.html页面完全不在同一个目录下。 - erapert
3
不给负面评价,但这样做是错误的。维护和升级(无论是下一个人还是未来的你)的难度都会增加。顺便提一句,如果有其他人认为这种做法是好主意,那么这个概念适用于所有插件和扩展程序——只需使用原生支持即可。现在的烦恼将为以后省去很多麻烦。 - Ben

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接