आप नियंत्रण के प्रवाह को उलटने की कोशिश कर रहे हैं। ऐसा करने का तरीका आपके नियंत्रक के लिए एक इंटरफ़ेस (एपीआई) लागू करना है जो आपका सर्वर नियंत्रण पास करने के लिए उपयोग कर सकता है।
एक साधारण उदाहरण होगा:
mycontroller.js
में
// no require needed here, at least, I don't think so
// Controller agrees to implement the function called "respond"
module.exports.respond = function(socket_io){
// this function expects a socket_io connection as argument
// now we can do whatever we want:
socket_io.on('news',function(newsreel){
// as is proper, protocol logic like
// this belongs in a controller:
socket.broadcast.emit(newsreel);
});
}
अब
server.js
में: क्योंकि नियंत्रक एपीआई वास्तव में एक socket.io कॉलबैक की तरह लग रहा
var io = require('socket.io').listen(80);
var controller = require('./mycontroller');
io.sockets.on('connection', controller.respond);
यह उदाहरण सरल है । लेकिन क्या होगा यदि आप नियंत्रक को अन्य पैरामीटर पास करना चाहते हैं? io
ऑब्जेक्ट की तरह या अंत बिंदुओं का प्रतिनिधित्व करने वाले चर की तरह? इसके लिए आपको थोड़ा और काम चाहिए लेकिन यह ज्यादा नहीं है। यह मूल रूप से एक ही चाल हम अक्सर से बाहर तोड़ या बंद होने बनाने के लिए उपयोग है: समारोह जनरेटर:
mycontroller.js
module.exports.respond = function(endpoint,socket){
// this function now expects an endpoint as argument
socket.on('news',function(newsreel){
// as is proper, protocol logic like
// this belongs in a controller:
endpoint.emit(newsreel); // broadcast news to everyone subscribing
// to our endpoint/namespace
});
}
अब में सर्वर पर हम क्रम में अंत पारित करने के लिए थोड़ा और काम आवश्यकता होगी बिंदु:
var io = require('socket.io').listen(80);
var controller = require('./mycontroller');
var chat = io
.of('/chat')
.on('connection', function (socket) {
controller.respond(chat,socket);
});
सूचना है कि हम socket
सीधे के माध्यम से पारित लेकिन हम एक बंद के माध्यम से chat
पर कब्जा। इस के साथ आप अपने स्वयं के नियंत्रकों के साथ कई अंतिमबिंदुओं प्रत्येक हो सकता है:
var io = require('socket.io').listen(80);
var news_controller = require('./controllers/news');
var chat_controller = require('./controllers/chat');
var news = io
.of('/news')
.on('connection', function (socket) {
news_controller.respond(news,socket);
});
var chat = io
.of('/chat')
.on('connection', function (socket) {
chat_controller.respond(chat,socket);
});
असल में, आप भी एक endpoint के लिए एकाधिक नियंत्रकों का उपयोग कर सकते हैं। याद रखें, नियंत्रक घटनाओं की सदस्यता लेने के अलावा कुछ भी नहीं करते हैं।
var io = require('socket.io').listen(80);
var news_controller = require('./controllers/news');
var chat_controller = require('./controllers/chat');
var chat = io
.of('/chat')
.on('connection', function (socket) {
news_controller.respond(chat,socket);
chat_controller.respond(chat,socket);
});
यह भी सादे socket.io साथ काम करता है (कोई अंतिम बिंदु/नामस्थान):: यह सर्वर है कि सुन कर रहा है है
var io = require('socket.io').listen(80);
var news_controller = require('./controllers/news');
var chat_controller = require('./controllers/chat');
io.sockets.on('connection', function (socket) {
news_controller.respond(socket);
chat_controller.respond(socket);
});
तुम सिर्फ फोन नहीं कर सकते हैं 'io.sockets.emit() ' –
मैं संदेश को सभी उपयोगकर्ता को नहीं भेजना चाहता हूं। इसलिए मुझे सक्रिय सॉकेट को फ़िल्टर करने के लिए सॉकेट ऑब्जेक्ट की आवश्यकता है ... मैंने अपना कोड – tschiela
अपडेट किया है, मैं ऐप को डीबग करने का लुत्फ उठाऊंगा, और सॉकेट बनने और फ़िल्टर किए जाने के बाद क्या होता है, या कुछ लॉगिंग जोड़ने के लिए कुछ लॉगिंग जोड़ें एक ही प्रभाव। चीजें काम कर रहे तरीके के बारे में आपकी धारणाओं में से एक रास्ता दिमागी होगा। मुझे लगता है कि जब कोई HTTP अनुरोध होता है तो आप विशिष्ट सॉकेट को संदेश भेजना चाहते हैं? मुझे लगता है कि आपका दृष्टिकोण काम करना चाहिए, लेकिन व्यक्तिगत रूप से मैं एक ही रैपर मॉड्यूल में सभी सॉकेट.आईओ पहुंच खींचूंगा, और जो मुझे चाहिए, निर्यात करें। 'Mysockets।शुरू करें (बंदरगाह) 'और' mysockets.sendNews (उपयोगकर्ता, msg) ' –