Что ж, в узле есть модули для всего. Для всего есть «начальный коммит» и, скорее всего, в github. В этом случае каждое приложение выполняет запрос к серверу со стороны клиента или, другими словами, выполняет вызов RPC. Основным методом транспорта в этом случае является ajax. И в некоторых современных браузерах у нас есть веб-сокеты. Для ajax это самый простой метод, который вы можете сделать, что хотите:
На стороне клиента:
var request.ajax('/ajax/setLolz', {data : 'nice', type : 'post'})
request.done(function(msg) {
$("#lolz").html( msg );
});
на стороне сервера:
var url = reruire('url')
var http = require('http');
var lolz = 'wow';
var methods = {
'/ajax/setLolz' : function (action, body, res) {
res.end(lolz);
lolz = body;
someOtherFunction();
}
}
http.createServer(function (req, res) {
var body = '';
var action = url.parse(req.url);
req.on('body', function(text) {
body += text;
}
req.on('end', function() {
methods[action.path](action, body, res);
}
}).listen(1337, '127.0.0.1');
Это был простой Аякс. Вы можете сделать это немного лучше, используя connect :
var connect = require('connect');
var app = connect()
.use(connect.bodyParser())
.use(function(req, res){
var action = url.parse(req.url);
methods[action.path](action, body, res);
})
.listen(1337);
Или проще с express :
var app = require('express');
var app = express.createServer()
.use(express.bodyParser());
app.get('/ajax/setLolz', function(req, res){
res.end(lolz);
lolz = req.body;
someOtherFunction();
});
app.listen(1337);
И да, есть множество модулей , которые могут вам помочь.
Что касается веб-сокетов, самый быстрый из известных мне серверов веб-сокетов - ws . Хотя некоторые браузеры могут не поддерживать его.
На стороне клиента:
websocket = new WebSocket('ws://www.host.com/ws');
websocket.onopen = function(evt) {
websocket.send(JSON.stringify({method : 'setLolz', msg : 'yes '};
};
websocket.onmessag = function(evt) {
$("#lolz").html( evt.data );
}
На сервере:
var WebSocket = require('ws');
var ws = new WebSocket('ws://www.host.com/ws');
var methods = {
'setLolz' : function (msg, ws) {
ws.send(lolz);
lolz = msg;
someOtherFunction();
}
}
ws.on('message', function(data, flags) {
data = JSON.parse(data);
methods[data.method](data.msg);
});
Тогда есть socket.io , который делает вещи намного проще. Это кросс-браузер и работает везде. Построен на ajax и websockets и некоторых других методах. Вы все исправляете к событиям. Вы даже можете использовать его рядом с http-сервером, прослушивающим тот же порт.
var io = require('socket.io').listen(1337);
io.sockets.on('connection', function (socket) {
socket.on('setLolz', function(data) {
socket.emit('lolz', lolz);
lolz = data;
});
socket.on('setLolz', someOtherFunction);// Yes, you can listen to an event with two functions
});
Но все же это не так просто, поэтому теперь я представляю вам nowjs .
В браузере:
now.setLolz(function(data){
$("#lolz").html( data );
});
На стороне сервера:
var nowjs = require("now");
var app = nowjs.initialize(httpServer);
app.now.setLolz = function(cb){
cb(lolz);
lolz = data;
someOtherFunction();
}
Я не хочу углубляться, но я надеюсь, что вы поняли суть. Есть и другие модули (dnode, hook.io, flatiron, railwayjs, racer, locomotivejs, ...), которые могут вам помочь. И да, вы всегда можете сделать свой собственный.
Удачного кодирования ...: D