点击Node.js和Socket.IO的jQuery函数

时间:2015-05-21 05:35:22

标签: jquery node.js sockets socket.io

我已按照推荐的方式创建了一个简单的聊天应用程序(工作正常),但我无法弄清楚如何使用Socket.IO在Web套接字上启动jQuery函数。

例如,我有一个单击按钮:

<button id="button">
  Click me!
</button>

我希望我的按钮在点击时执行一个功能:

$("button").click(function() {
  doSomething();
});

以下是我在客户端的示例

var socket = io.connect('http://localhost:3000');

function doSomething() {
    $('body').css({
         background: "red"
    });
}

以下是我在服务器端(我的server.js文件)的内容 - 我认为这可能会导致部分问题:

var io = require('socket.io'),
    connect = require ('connect');

var app = connect().use(connect.static('public')).listen(3000);
var commands = io.listen(app);

commands.sockets.on('connection', function (socket){

    // Possibly insert handler here?

});

以防万一我的目的不明确 - 单击按钮时我想这样,让所有连接的客户端的背景变为红色。

1 个答案:

答案 0 :(得分:3)

首先在点击按钮时向node.js / socket.io-server发出事件。然后在服务器端,您必须向所有客户端发出。在客户端,您必须侦听该服务器端事件。你的服务器看起来也不太好。

尝试类似这样的事情:

"use strict";

var server = require('http').createServer();
var io = require('socket.io')(server);


io.on('connection', function (socket) {
    //senden an socket dass er verbunden ist
    //socket.emit('userOnline', {message: 'verbunden'});

    //Informationen vom User holen
    socket.on('changeBgColor', function (color) {
        console.log(color);
        socket.broadcast.emit('changeBgColorEveryWhere', color.color);
        socket.emit('changeBgColorEveryWhere', color.color);
    });
});

server.listen('3000');

例如在客户端:

<!doctype html>
<html>
    <head>
        <title>test</title>
    </head>
    <body>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
        <script src="http://localhost:3000/socket.io/socket.io.js"></script>
        <script type="text/javascript">
            var socket = io('ws://localhost:3000/');

            $(document).off('click', '#button').on('click', '#button', function (e) {
                console.log('click');

                socket.emit('changeBgColor', {color: 'red'});
                e.preventDefault();
            });

            socket.on('changeBgColorEveryWhere', function (color) {
                console.log(color);
                $('body').css('background', color);
            });
        </script>

        <button id="button">Button</button>
    </body>
</html>