2012-03-26 15 views
2

私はNode.jsで私の最初のステップを踏み出していますが、クライアント側から(Node.jsを使用して)サーバーサイドを定義するJSメソッドを呼び出す方法があるかどうかは疑問でした。例えばNode.jsメソッド呼び出しをリモートで

function read_file_server_side(id){ 
    // Do stuff on the server side. 
} 

そして、クライアント側からメソッドを呼び出す必要があります。もちろん、RESTの原則を使用してサーバー側のメソッドをラップすることは可能であることを理解しています。すなわち、それをウェブサービスとしてクライアントに公開し、クライアントにHTTPリクエストを使用させる。しかし、関数を直接使うことができれば便利です。

答えて

3

代わりのsocket.io、私はむしろNow.jsにあなたを指すと思います。それはあなたが望むものを正確に行います。クライアント側でサーバ側の機能を共有します。

+0

ありがとう!私が必要とするもののように見えます! –

+0

クール!答えを良いものとしてマーク:-) –

+0

お待ちください!とにかく、あなたが質問を投稿してからそれを受け入れることができる時間に制限があります。しかし、もちろん、あなたのための緑のダニがあります! –

1

はこちらをご覧:Socket.IO

あなたは基本的に簡単かつ迅速にサーバ側のメソッドを呼び出すことができます。

サーバー:

socket.on('doAwesomeStuff', function (data) { 
    startDoingAwesomeStuff(); 
} 

function startDoingAwesomeStuff() { 
    // this would be the remotely invoked method. 
    ... 
} 

はクライアント:

socket.emit('doAwesomeStuff', { my: 'data' }); 
+0

クライアント側からサーバー上にあるメソッドをどのように呼び出すかわかりませんでした。出来ますか?あなたは例を提供できますか(擬似コードでさえ)? –

+0

例を含めるように更新されました。 –

3

ノードに関することは、すべてのモジュールがあります。すべての場合、「初期コミット」があり、おそらくgithubにあります。この場合、クライアント側からサーバーに要求する、つまりRPC呼び出しを行うすべてのアプリケーションの一部です。この場合の基本的な転送方法はajaxです。現代のブラウザの中にはウェブソケットがあります。クライアント側では

:サーバー側の

var request.ajax('/ajax/setLolz', {data : 'nice', type : 'post'}) 

request.done(function(msg) { 
    $("#lolz").html(msg); 
}); 

:AJAXについては、これはあなたが欲しいものを作ることができる最も簡単な方法です

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'); 

これは単純なAJAXました。あなたは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); 

そして、ええ、そこにあなたを助けることができるmodulesの多くは。

ウェブソケットとしては、私が知っている中で最も速いウェブソケットサーバは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とwebsocketと他の方法で構築されています。イベントにすべてをパッチします。同じポートでリッスンしている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

関連する問題