2014-06-11 8 views
10

मैं एक नोड.जेएस एप्लीकेशन विकसित कर रहा हूं जो वास्तविक समय संचार को संभालने के लिए सॉकेट.ओ का उपयोग करता है। मेरा कोड ऑन और एमिट फ़ंक्शंस से भरा है। मैं कमरे की सुविधा का भी उपयोग करता हूं। मेरे ऐप इस तरह दिखता है:सॉकेट.io सर्वश्रेष्ठ कोडिंग अभ्यास

var server = require('http').Server(); 
    var io = require('socket.io')(server); 
    io.on('connection', function(socket){ 
     socket.on('event1', function(data){"lots of socket and non-socket codes" }); 
     socket.on('event2', function(data){"lots of socket and non-socket codes" }); 
     socket.on('event3', function(data){"lots of socket and non-socket codes" }); 
     socket.on('disconnect', function(){"Some other code"}); 
    }); 
    server.listen(portNum); 

यह ठीक काम करता है, लेकिन यह मेरा आदर्श समाधान नहीं है। सबसे पहले, इस दृष्टिकोण में सब कुछ अलग फ़ाइल के बजाय छोटी फ़ाइल की बजाय एक बड़ी फ़ाइल में है।

दूसरी बात, इस ऐप को डीबग करना और बनाए रखना काफी मुश्किल है क्योंकि यह कोड की 1000+ लाइनों की बात आती है।

वहाँ उद्यम गुणवत्ता Socke.io अनुप्रयोगों के विकास पर एक पसंदीदा/सबसे अच्छा अभ्यास है:

यहाँ मेरे सवाल है? यदि हां, क्या कोई बड़ा ओपनसोर्स सॉकेट.ओ एप्लिकेशन है जो इस दृष्टिकोण या किसी भी आलेख को प्रदर्शित करता है जो मुझे बेहतर कोड में मेरे कोड को दोबारा करने में मदद करता है?

+0

मैं एक अलग में हर कॉलबैक फ़ंक्शन डालकर शुरू करने लगता है फ़ंक्शन जिसे आपने io.on ('कनेक्शन') से बाहर रखा है, और शायद उन्हें एक अलग फ़ाइल में भी डाल सकता है (मॉड्यूल.एक्सपोर्ट्स का उपयोग करके), आप एक स्पष्ट आवेदन शुरू कर देंगे। – Jujuleder

+0

@ जुजुल्डर जो मुझे चाहिए वही है। लेकिन मैं जानना चाहता हूं कि सभी मॉड्यूल में सॉकेट ऑब्जेक्ट को बनाए रखते हुए यह कैसे प्राप्त किया जा सकता है। – Raiss

उत्तर

5

मुझे लगता है कि आप प्रत्येक कॉलबैक फ़ंक्शन को एक अलग फ़ंक्शन में डालकर शुरू करते हैं जिसे आपने io.on ('कनेक्शन') से बाहर रखा है, और शायद उन्हें एक अलग फ़ाइल में भी डाल सकता है (मॉड्यूल.एक्सपोर्ट्स का उपयोग करके), आप शुरू करना शुरू कर देंगे एक स्पष्ट आवेदन।

ठीक है तो मैं आपको एक संभावना लिखूंगा जिसका उपयोग मैं करता हूं, मुझे नहीं पता कि यह socket.io के लिए ब्रह्मांड का सबसे अच्छा पैटर्न है, लेकिन यह अच्छा लगता है।

आपका मुख्य फ़ाइल (io.onconnection साथ फ़ाइल), तो आप कुछ इस तरह हो सकता है में (आप न नाम स्थान का उपयोग करने के लिए है, यह सिर्फ एक उदाहरण है):

var SocketEvent = require('./socketEvent'); 

io.of('/user').on('connection', function (socket) { 

    SocketEvent.load_common_event(socket); 
    SocketEvent.load_user_event(socket); 

}); 

io.of('/operator').on('connection', function (socket) { 

    SocketEvent.load_common_event(socket); 
    SocketEvent.load_operator_event(socket); 

}); 

और socketEvent.js में कि आप लोड आप इस हो सकता है:

exports.load_common_event = function(socket){ 
    socket.on('disconnect', function(){"Some other code"}); 
}; 

exports.load_user_event = function(socket){ 
    socket.on('event1', function(data){"lots of socket and non-socket codes" }); 
    socket.on('event2', function(data){"lots of socket and non-socket codes" }); 
    socket.on('event3', function(data){"lots of socket and non-socket codes" }); 
}; 

exports.load_operator_event = function(socket){ 
    socket.on('event4', function(data){"lots of socket and non-socket codes" }); 
    socket.on('event5', function(data){"lots of socket and non-socket codes" }); 
    socket.on('event6', function(data){"lots of socket and non-socket codes" }); 
}; 

मुझे पता है अगर आप किसी भी सवाल है चलो

एड-ऑन

यदि आप सॉकेट.ऑन ('event', myModule.doSomething) जैसे कुछ चाहते हैं;

आप इस मैं मॉड्यूल में लगता है की तरह कर सकते हैं:

ग्राहक:

var myModule = require('./socketModule'); 

io.on('connection', function (socket) { 

    socket.on('event' , myModule.doSomething(/*some parameters (socket)*/)); 

}); 

सर्वर socketModule.js:

exports.doSomething = function(/*some parameters (socket)*/){ 
    /* Some processing around */ 
}; 
+0

धन्यवाद, हालांकि मैं एकाधिक सॉकेट एंड पॉइंट्स का उपयोग नहीं करता हूं, उपर्युक्त दृष्टिकोण काफी दिलचस्प है। – Raiss

+0

मुझे 'सॉकेट.ऑन (' ईवेंट ', myModule.do कुछ) होने पर अधिक रुचि होगी; ' मुझे यकीन नहीं है कि मेरा मॉड्यूल कैसे लिखा जाना चाहिए। – Raiss

+0

मैंने संपादित किया, मुझे बताएं कि यह अच्छा है या नहीं – Jujuleder

संबंधित मुद्दे