2012-10-23 18 views
7

Yayınlamak ve abone olmak için nodejs uygulamasında küçük bir uygulama oluşturmaya çalışıyorum. İstemci tarafında nasıl yayınlayabildiğim konusunda şaşırdım. İşte sahip olduğum kod. İşte Nodejs Yayınla/abone olmak için istemcide yayımla

benim sunucu kodu (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); 
    }); 
}); 

Ve burada istemci kodunu

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

Özellikle istemci yan soketi geri arama işlevlerinde, kodunuza bazı açıklamalar ve/veya yorumlar ekleyerek size yardımcı olmamıza yardımcı olun. Müşterinizin verileri nasıl ve nerede yayınlamasını istiyorsunuz? – matthias

+0

İstemcinin bir etkinliği yayınlamasına izin vermek için "POST" yolunu kullanmaya çalışıyorsunuz gibi görünüyor; bu doğru mu? – floatingLomas

cevap

4

Sen istemci ve alınan sunucu WebSocket bağlantıları, hem emit yöntemi kullanabilirsiniz olduğunu Socket.io:

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

Ardından sunucunuzda veya mesaj:

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

bazı POST api kullanmak zorunda kalmadan WebSockets çift yönlü iletişim ortamı sağlanması Bu şekilde.