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

Posted

技术标签:

【中文标题】更改 Socket.IO 静态文件服务路径【英文标题】:Change Socket.IO static file serving path 【发布时间】:2012-10-01 05:38:49 【问题描述】:

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

/socket.io/socket.io.js

我希望能够将该基本路径更改为其他内容,例如

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

是否有任何内置方法可以做到这一点,或者任何不改变 Socket.IO 代码的方法?我认为答案在 Static 模块 (require('socket.io').Static)) 中,但没有编写自己的模块来替换默认值,我认为没有办法去改变它的行为方式。

我该怎么做?

【问题讨论】:

【参考方案1】:

resource option 允许您配置 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' );

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

【讨论】:

对于刚到这里的人,这是针对 1.0 之前的版本。对于 1.0 之后,请参阅this 答案。【参考方案2】:

对于 socket.io 版本 1.2.1,这对我有用。

服务器端:

var io = require('socket.io')(path: '/foo/bar');

客户端:

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

仅供参考:http://socket.io/docs/migrating-from-0-9/#configuration-differences

【讨论】:

我改变了这个,现在我的控制台日志显示了过多的 GET 调用,我可能做错了什么吗??【参考方案3】:

如果您使用的是socket.io 1.0版,则配置与以前的版本不同。

对于客户端:

var socket = io.connect('http://localhost:8888',  path: '/some/path/socket.io' );

服务器端

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

【讨论】:

【参考方案4】:

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

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

更多配置请访问wiki

【讨论】:

这是唯一对我有用的东西。我将 node.js 的东西放在与静态 .html 页面完全不同的目录中。 不反对,但这是错误的做法。维护和升级(为下一个人或未来的你)刚刚增加了难度。一个友好的顺便说一句,对于任何其他认为这种类型的东西是个好主意的人:这个概念适用于所有插件和扩展——只要坚持原生支持。现在的头疼会在以后节省很多。

以上是关于更改 Socket.IO 静态文件服务路径的主要内容,如果未能解决你的问题,请参考以下文章

我可以通过 node.js 中的 socket.io 将文件上传到服务器吗?

使用特定路径和命名空间连接到 Socket.IO 服务器

NodeJS静态文件访问性能测试

带有 nginx 的 Socket.io

尝试提供静态 JS 文件 Node.js,错误 404

nginx、node.js 和 socket.io - 有工作婚姻吗?