2011-06-08 60 views

回答

7

在socket.io 2012 0.7.6

io.sockets.on('connection', function(client) { 
    console.log(io.transports[client.id].name); 
}); 
3

我相信你能找到它,如果你在一個客戶對象的內部挖掘,雖然不知道爲什麼你需要這個,我必須建議對這類檢查的原因有二:

首先,由於它不在API中,開發人員絕對沒有責任保持向後兼容性,因此任何給定版本都可能以不同方式實現/存儲該信息,這隻會影響到您自己的開發並導致問題。

其次,更重要的是,我建議你重新考慮一下你的設計,通過socket.io與服務器的通信建立爲透明正在使用的方法。兩邊應該沒有區別。這就是圖書館的目的,設計一個其他行爲的應用程序完全正交於該想法。

+0

這個問題是我想知道傳輸類型的原因http://stackoverflow.com/questions/6280569/socket-io-xhr-polling-delay-on-disconnection – wilsonpage 2011-06-08 15:19:52

+0

@davin在深入挖掘其內部實際上並不可行。 – Raynos 2011-06-08 17:10:12

+1

@Raynos,我想我記得在客戶端對象(或子對象)中的某個地方看到了一個'url'屬性,難道你不能使用庫本身使用的相同約定將它們從那裏排除嗎? – davin 2011-06-08 17:16:30

0

我相信這會解決您的問題。我的技巧是在客戶端連接後將傳輸類型保存在HTTP請求對象上。然後,您可以稍後在回調中提取它。首先,我們調整了Listener類:

var io = require('socket.io'), 
io.Listener.prototype._onConnectionOld = io.Listener.prototype._onConnection; 
io.Listener.prototype._onConnection = function(transport, req, res, up, head){ 
    req.socketIOTransport = transport; // Take note of the transport type 
    this._onConnectionOld.call(this, transport, req, res, up, head); 
}; 

,然後在下面在你的應用程序的身體:

var socket = io.listen(app), 
socket.on('connection', function(client){ 
    console.log(client.request.socketIOTransport); // Lets check that transport 
    // ... 
}); 

希望這有助於!

7

月,這個工程:socket.transport

21

由於Socket.IO 1.0:

客戶

socket.on('connect', function() { 
    console.log(socket.io.engine.transport.name); 
} 

服務器

io.sockets.on('connection', function(socket) { 
    console.log(socket.conn.transport.name); 
} 
+5

只是爲了確認:兩者仍然與1.3.6 – 2015-08-25 09:27:31

1

參考的緣故和谷歌失蹄: - 萬一有人仍在使用V0.9(或可能更早) 您可以訪問客戶端的這個信息是這樣的:

var socket = io.connect(); 
console.log(socket.socket.transport.name); //log the name of the transport being used. 

在Google羣組上找到答案https://groups.google.com/forum/#!topic/socket_io/yx_9wJiiAg0

0
io.connect.managers['connect url/port'].engine.transport 
相關問題