2013-11-03 4 views
5

के बीच वेबस्केट कनेक्शन साझा करना सॉकेट.आईओ की आरपीसी कार्यक्षमता का उपयोग करते समय बाइनरी डेटा भेजने में सक्षम होने के प्रयास में, मैंने सोचा कि मैं सॉकेट.आईओ और WS मॉड्यूल दोनों का उपयोग उसी सर्वर पर कर सकता हूं। दोनों कनेक्शन बनाने के लिए पूरी तरह से अलग सर्वर खोलने के बजाय, मुझे आश्चर्य है कि क्या मैं एक ही HTTP सर्वर का उपयोग कर सकता हूं।सॉकेट.आईओ और डब्ल्यूएस

क्या यह एक ही समय में सॉकेट.आईओ और डब्ल्यूएस दोनों के लिए http.createServer() के साथ बनाए गए केवल एक सर्वर का उपयोग करना संभव है? स्पष्ट होने के लिए, मुझे क्लाइंट से सॉकेट.आईओ कनेक्शन और नियमित वेबसाकेट कनेक्शन दोनों बनाने की उम्मीद है। निम्न कोड क्लाइंट पक्ष पर प्रोटोकॉल त्रुटियों को बनाता है, संभवतः क्योंकि सॉकेट.आईओ और डब्ल्यूएस दोनों कनेक्शन को संभालने का प्रयास कर रहे हैं।

var http = require('http'); 
var server = http.createServer(app); 
server.listen(3000); 

// Socket.IO 
var io = require('socket.io').listen(server); 
io.sockets.on('connection', function (socket) { 
    // ... 
} 

// ws 
var WebSocketServer = require('ws').Server 
var wss = new WebSocketServer({server: server}); 
wss.on('connection', function (ws) { 
    // ... 
} 

उत्तर

3

2016 की स्थिति के अनुसार मैं बस WebSocket मॉड्यूल ws एक रास्ता

var wss = new WebSocketServer({ server: server, path: '/ws' }); //do not interfere with socket.io 

बिल्कुल socket.io पक्ष को बदलने के लिए

कोई ज़रूरत नहीं आवंटित कर सकते हैं
5

यह पता चला है कि कुछ कॉन्फ़िगरेशन के साथ यह संभव है। यह चाल सॉकेट.आईओ को गैर- सॉकेट.आईओ वेबसाकेट कनेक्शन अनुरोधों को नष्ट करने के लिए नहीं है, और उसके बाद सॉकेट.आईओ और डब्ल्यूएस को अलग-अलग पथों पर डालने के लिए है। यहां कुछ गन्दा उदाहरण कोड है, लेकिन यह द्वितीयक कनेक्शन के लिए सॉकेट.आईओ सत्र आईडी का पुन: उपयोग करते समय काम करता है।

var server = http.createServer(app); 
server.listen(3000); 

var WebSocketServer = require('ws').Server 
var io = require('socket.io').listen(server); 

io.set('destroy upgrade', false); 
io.set('transports', ['websocket']); 

io.sockets.on('connection', function (socket) { 
    var wss = new WebSocketServer({ 
     server: server, 
     path: '/anythingYouWant/' + socket.id 
    }); 
    wss.on('connection', function(ws) { 
     ws.on('message', function(message) { 
      console.log(message); 
     }); 
    }); 
}); 
संबंधित मुद्दे