更改 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 静态文件服务路径的主要内容,如果未能解决你的问题,请参考以下文章