में socket.io तर्क मैं काफी Node.js के लिए नया हूँ और मैं एकाधिक फ़ाइलों में एक परियोजना को अलग परियोजना के रूप में आकार में बढ़ता है इसकी काफी जटिल पाया है। मेरे पास एक बड़ी फ़ाइल थी जो पहले एक मल्टीप्लेयर एचटीएमएल 5 गेम के लिए फाइल सर्वर और सॉकेट.आईओ सर्वर दोनों के रूप में काम करती थी। मैं आदर्श रूप फ़ाइल सर्वर, socket.IO तर्क (नेटवर्क से जानकारी पढ़ रहे हैं और एक बफर करने के लिए इसे लिखने के एक टाइमस्टैम्प के साथ है, तो अन्य सभी खिलाड़ियों के लिए यह उत्सर्जन), और खेल तर्क अलग करना चाहते हैं।अलग फ़ाइल सर्वर और Node.js
socket.io से पहले उदाहरण का उपयोग मेरी समस्या प्रदर्शित करने के लिए, वहाँ आम तौर पर दो फ़ाइलें हैं। app.js
सर्वर और index.html
ग्राहक के लिए भेजा जाता है।
app.js:
var app = require('http').createServer(handler)
, io = require('socket.io').listen(app)
, fs = require('fs')
app.listen(80);
function handler (req, res) {
fs.readFile(__dirname + '/index.html',
function (err, data) {
if (err) {
res.writeHead(500);
return res.end('Error loading index.html');
}
res.writeHead(200);
res.end(data);
});
}
io.sockets.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
});
index.html:
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://localhost');
socket.on('news', function (data) {
console.log(data);
socket.emit('my other event', { my: 'data' });
});
</script>
अलग फ़ाइल सर्वर और खेल सर्वर तर्क मैं समारोह "हैंडलर" एक फाइल में परिभाषित की आवश्यकता होगी करने के लिए, मैं की आवश्यकता होगी अज्ञात फ़ंक्शन ने किसी अन्य फ़ाइल में होने के लिए io.sockets.on() के लिए कॉलबैक का उपयोग किया, और इन फ़ाइलों में सफलतापूर्वक शामिल करने के लिए मुझे अभी तक एक तीसरी फ़ाइल की आवश्यकता होगी।
start.js:
var fileserver = require('./fileserver.js').start()
, gameserver = require('./gameserver.js').start(fileserver);
fileserver.js:
var app = require('http').createServer(handler),
fs = require('fs');
function handler (req, res) {
fs.readFile(__dirname + '/index.html',
function (err, data) {
if (err) {
res.writeHead(500);
return res.end('Error loading index.html');
}
res.writeHead(200);
res.end(data);
});
}
module.exports = {
start: function() {
app.listen(80);
return app;
}
}
gameserver:
var io = require('socket.io');
function handler(socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
}
module.exports = {
start: function(fileserver) {
io.listen(fileserver).on('connection', handler);
}
}
यह लगता है काम करने के लिए (स्थिर अभी के लिए मैं निम्नलिखित की कोशिश की है सामग्री ठीक से परोसा जाता है और जब ग्राहक क्लाइंट कनेक्ट करता है तो कंसोल स्पष्ट रूप से सॉकेट.आईओ के साथ हैंडशेक दिखाता है) हालांकि कोई डेटा नहीं है कभी भेजा ऐसा लगता है कि socket.emit() और socket.on() को वास्तव में कभी नहीं कहा जाता है। मैं भी console.log('User connected');
लेकिन इस प्रदर्शित नहीं है जोड़ने के लिए हैंडलर संशोधित() gameserver.js
में।
मेरे पास एक फ़ाइल में सॉकेट.आईओ कैसे हो सकता है, एक फ़ाइल सर्वर दूसरे में, और फिर भी दोनों सही ढंग से काम करने की अपेक्षा करते हैं?
क्या आप एक्सप्रेस जेएस ढांचे को जानते हैं? http://expressjs.com/ यह बहुत अच्छा है और वास्तव में आपको अपने आवेदन की संरचना में मदद करता है। github (https://github.com/visionmedia/express/tree/master/examples) पर उदाहरणों का एक टन है शायद कुछ ऐसा है जो आपकी समस्या से आपकी मदद कर सकता है ... – pkyeck
@pkyeck: मैं पढ़ रहा हूं अभिव्यक्ति करने के लिए अब यह पता लगाने और समझने के लिए कि यह मुझे कैसे लाभ पहुंचा सकता है, लेकिन अब तक मुझे जो चाहिए वह उससे अधिक जटिल लगता है। मैं वास्तव में चाहता हूं कि मेरे तर्क को गेम सर्वर और फ़ाइल सर्वर के लिए दो अलग-अलग फाइलों में अलग करना है, फिर एक तीसरी फ़ाइल है जो दोनों सर्वरों को ठीक से शुरू करती है। – stevendesu
क्या आपके पास मेरा "नया" उत्तर देखने का समय था? – pkyeck