2013-02-19 15 views
8

私はnode.jsを使い慣れていませんが、これを使用してソケットストリームのWebフレームワークについて少し知っていますが、JavaScriptからnode.jsメソッドを簡単に呼び出すことができます。私は、このフレームワークを使用せずにこれを行う方法を知らない。 JavaScriptからnode.jsメソッドを呼び出すにはどうすればよいですか?javascriptからnode.jsサーバーサイドメソッドを呼び出す方法は?

以下のコードは、サーバーサイドメソッドを呼び出すためにsocketstreamを使用しています。だから私はこのフレームワークを使用せずに同じサーバー側のメソッドを呼び出すしたいと思います。

ss.rpc('FileName.methodName',function(res){ 
    alert(res);   
}); 
+1

私の知る限り(私が間違っているなら、私を修正)、あなたが直接クライアントからサーバー上のメソッドを呼び出すことはできません。ただし、メソッド名を付けてサーバーに何らかの要求を送信してから、サーバーが呼び出すことができます。 – Supericy

+0

@Supericy:あなたの応答に感謝しますが、私はコードを直接説明することはできません。 – user1629448

+1

クライアントが要求するエンドポイントを公開する必要があります。 express.jsでは、それは 'app.get( '/ some.name'、function(req、res){// call code})'のようなものです。次に、クライアント上のAJAX呼び出しを介してそのエンドポイントにヒットすることができます。 – jli

答えて

10

私はSocket.IO

サーバーサイドコードあなたがルータ機能を使用することができますまた

var io = require('socket.io').listen(80); // initiate socket.io server 

io.sockets.on('connection', function (socket) { 
    socket.emit('news', { hello: 'world' }); // Send data to client 

    // wait for the event raised by the client 
    socket.on('my other event', function (data) { 
    console.log(data); 
    }); 
}); 

とクライアント側

<script src="/socket.io/socket.io.js"></script> 
<script> 
    var socket = io.connect('http://localhost'); // connec to server 
    socket.on('news', function (data) { // listen to news event raised by the server 
    console.log(data); 
    socket.emit('my other event', { my: 'data' }); // raise an event on the server 
    }); 
</script> 

、使用することをお勧めしたいです特定のrの関数を呼び出すクライアントからequest

var server = connect() 
    .use(function (req, res, next) { 
     var query; 
     var url_parts = url.parse(req.url, true); 
     query = url_parts.query; 

     if (req.method == 'GET') { 
     switch (url_parts.pathname) { 
      case '/somepath': 
      // do something 
      call_some_fn() 
      res.end(); 
      break; 
      } 
     } 
    }) 
    .listen(8080); 

AJAX jQueryの

を使用して要求
$.ajax({ 
    type: 'get', 
    url: '/somepath', 
    success: function (data) { 
     // use data 
    } 
}) 
+0

Socket.IOは多数のリクエスト(OPが示すように見える)を送信していない場合、過剰な処理を行う可能性があります。 – jli

+0

合意するかわりに、クライアントが 'HTTP'要求を起動したときに' connect'とルータ関数を使って何らかの関数を呼び出すことができます。 –

+0

すべての人に感謝します。私はsocket.IOを使用しようとします。 – user1629448

関連する問題