使用快递框架。我想调用驻留在server.js中的function init() { // }
(使用express.js设置)
客户端包含代码
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://localhost');
</script>
但我想在客户端的index.html上从init()
调用<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');不执行。我不明白为什么?
答案 0 :(得分: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
};
});
});
答案 1 :(得分: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
。
如果您需要异步行为,我可以提供另一个示例。