0

Express フレームワークの使用。function init() { // }server.jsにあるものを呼び出したい(express.jsで設定)

クライアント側にはコードが含まれています

<script src="/socket.io/socket.io.js"></script>
<script>
 var socket = io.connect('http://localhost');
</script>

しかし、クライアント側の index.htmlinit()から 呼び出したいです。<a href='WHAT TO PUT HERE'> Click to invoke Init() on server </a>

編集:

<a href='javascript:callInit();'> Get Init </a>

上記の関数 callInit() を呼び出します

 <script> function callInit() {  socket.emit('init', 'data'); }

しかし、`socket.emit('init', 'data'); 実行しません。私はなぜ理解できないのですか?

4

2 に答える 2

1

サーバーオブジェクトのメソッドを呼び出してその結果を取得する「一般的な」方法が必要な場合は、非常に簡単に実行できます。

serviceたとえば、サーバー側で特定のオブジェクト のメソッドを公開したいと思います。

var service = {
   init: function(p1, p2) {
     return p1+p2;
   }
};

// exposes all methods
for (method in service.__proto__) {
  // use a closure to avoid scope erasure
  (function(method){
    // method name will be the name of incoming message
    socket.on(method, function() {
      // assumption that the invoked method is synchronous
      var result = service[method].apply(service, arguments);
      // method name suffixed with '-resp' will be the outgoing message
      socket.emit(method+'-resp', result);
    });
  })(method)

クライアント側では、次のようにします。

socket.emit('init', 10, 5);
socket.on('init-resp', function(result) {
  console.log('addition result: '+result);
});

また15、コンソールに出力される場合があります。

非同期動作が必要な場合は、別の例を提供できます。

于 2013-08-23T11:31:04.910 に答える