2012-10-23 10 views
7

में क्लाइंट से प्रकाशित करें मैं प्रकाशित करने और सदस्यता लेने के लिए नोडजेज़ में एक छोटा ऐप बनाने की कोशिश कर रहा हूं। मैं क्लाइंट साइड से कैसे प्रकाशित कर सकता हूं में फंस गया हूं। मेरे पास कोड है।नोडज पब/उप

यहाँ यहाँ अपने सर्वर कोड (server.js)

var express = require('express'), 
app = express(), 
http = require('http'), 
server = http.createServer(app); 
app.use(express.bodyParser()); 

app.get('/', function(req, res) { 
    res.sendfile(__dirname + '/public/index.html'); 
}); 

app.post('/publish/:channel/:event/', function(req, res) { 
    console.log("**************************************"); 
    var params = req.params; 
    console.log(req.params); 
    console.log(req.body); 
    var data = req.body; 
    console.log("**************************************"); 
    var result = io.sockets.emit(params.channel,{event:params.event,data:data}); 
    //console.log(result); 
    console.log("**************************************"); 
    res.sendfile(__dirname + '/public/index.html'); 
}); 

//include static files 
app.use(express.static(__dirname + '/public')); 

server = server.listen(3000); 
var io = require('socket.io').listen(server); 

io.sockets.on('connection', function (s) { 
    socket = s 
    socket.emit('c1', { hello: 'world' }); 

    socket.on('test', function (data) { 
    socket.emit('c1', { hello: 'world' }); 
    console.log('test');console.log(data); 
    }); 
}); 

है और

var narad = {}; 
narad.url = 'http://192.168.0.46:3000'; 

narad.lisentingChannels = {} 

var socket = io.connect(narad.url); 

function Channel(channelName) { 
    this.channelName = channelName; //serviceObject is the object of 
    this.events = {}; 
}; 

Channel.prototype.bind = function (event, callback) { 
    this.events[event] = callback; 
}; 

narad.subscribe = function (channelName) { 
    var channel = new Channel(channelName) 
    this.lisentingChannels[channelName] = channel; 

    socket.on(channelName, this.callbackBuilder(channel)) 

    return this.lisentingChannels[channelName]; 
} 

narad.callbackBuilder = function (channel) { 
    return function (data) { 
    var callback = channel.events[data["event"]]; 
    callback(data.data); 
    } 
} 
+0

कृपया अपने कोड पर विशेष रूप से अपने क्लाइंट साइड सॉकेट कॉलबैक फ़ंक्शंस पर कुछ स्पष्टीकरण और/या टिप्पणियां जोड़कर आपकी सहायता करने में हमारी सहायता करें। आप कहां और किस तरह से अपने क्लाइंट को डेटा प्रकाशित करना चाहते हैं? – matthias

+0

ऐसा लगता है कि आप क्लाइंट को ईवेंट प्रकाशित करने की अनुमति देने के लिए 'POST' मार्ग का उपयोग करने का प्रयास कर रहे हैं; क्या वो सही है? – floatingLomas

उत्तर

4

आप दोनों क्लाइंट और सर्वर WebSocket कनेक्शन, ले लिया पर emit विधि का उपयोग कर सकते हैं ग्राहक कोड है Socket.io से:

var socket = io.connect(narad.url); 
socket.emit('publish', 'message'); 

फिर अपने सर्वर पर आप सुनो या संदेश:

socket.on('publish', function (data) { 
    // Emit the published message to the subscribers 
    socket.emit('subscribers', data); 
    console.log(data); 
}); 

इस तरह से आप कुछ POST एपीआई का उपयोग किए बिना WebSockets के द्वि-दिशात्मक संचार का उपयोग कर रहे हैं।

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