2012-10-10 97 views
15

我在具有基本HTTP服務器(無Express或Connect或類似的東西)的節點服務器上使用Socket.IO。默認情況下,Socket.IO服務於客戶端文件更改Socket.IO靜態文件服務路徑

/socket.io/socket.io.js

我想能夠在該基地路徑更改爲別的,像

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

是否有任何內置的方式做到這一點,或者在不改變Socket.IO的代碼什麼辦法?我認爲答案在於Static模塊(require('socket.io').Static)),但是我沒有寫自己的代碼來取代默認設置,我沒有辦法去改變行爲方式。

我該怎麼做?

回答

21

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' }); 

(注意:在這裏我們不使用斜線出於某種原因。)

+2

對於剛到這裏的用戶,這是針對1.0之前的版本。對於1.0之後,請參閱[this](http://stackoverflow.com/a/25438603/400654)回答。 –

2

您可以在路徑node_modules/socket.io/node_modules/socket.io-client/dist中找到客戶端腳本socket.io.js。它複製到一個新的文件夾,並從客戶端

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

用正確的路徑把它更多的配置訪問的wiki

+0

這只是爲我工作的事情。我有一個完全不同於靜態.html頁面的目錄中的node.js文件。 – erapert

+3

不下調,但這是做錯的方法。維護和升級(對於下一個傢伙,或未來的你)剛剛增加了難度。對於任何其他人來說,認爲這種類型的東西是一個好主意:這個概念適用於所有插件和擴展 - 只需堅持原生支持。現在頭痛會在很多時候挽救很多人。 – Ben

9

如果您正在使用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' }); 
12

對於socket.io版本1.2.1 ,這對我的作品。

服務器端:

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

客戶端:

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

FYI:http://socket.io/docs/migrating-from-0-9/#configuration-differences

+0

我改變了這一點,現在我的控制檯日誌顯示過多的GET調用,我可能做錯了什麼? – Josh