2013-08-23 79 views
0

使用express框架。我想要调用function init() { // }驻留在server.js(设置使用express.js)如何使用socket.io从客户端调用服务器端函数?

客户端侧包括代码

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

但我想上在客户端的index.html从<a href='WHAT TO PUT HERE'> Click to invoke Init() on server </a>调用init()

编辑:

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

调用函数callInit()如上述

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

但是`socket.emit( '初始化', '数据');不执行。我不明白为什么?

+1

你想要启动快递或驻留在正在运行的应用程序的功能?如果你想调用一个运行app和套接字的方法,只需看看socket.io示例,并让客户端发出一些你在服务器端有事件的数据。 socket.on('initiate',init)。 – Todilo

+0

我想调用服务器端的函数init()。 – Swagg

+1

然后使用sachins的答案,但用init()替换函数init(){}只在您定义它的地方。 – Todilo

回答

4

Client.js

<script src="/socket.io/socket.io.js"></script> 
    <script> 
    var socket = io.connect('http://localhost'); 
    $("#urAnchorTagId").click(function(){ 
     socket.emit('urEvent','urData'); 
    }); 
</script> 

Server.js

var app = express(); 
    var server = http.createServer(app); 
    var io = require('socket.io').listen(server); 
    server.listen(8080); 
    io.sockets.on('connection', function (socket) { 
     socket.on('urEvent', function (data) { 
     function init(){ 
      //ur task 

      }; 
    }); 
}); 
+0

,而不是在socket.on中定义函数init。我只是想在那里调用它。所以我写socket.on('urEvent',init();); – Swagg

+0

@Swagg那很好。 – sachin

+0

请阅读编辑。还有一些东西缺失。 – Swagg

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

如果您需要异步行为,我可以提供另一个示例。

+0

问题是,您如何从客户端的标记调用serverside函数? – Swagg

相关问题