Node.js + socket.io返回事件数据

时间:2013-05-26 11:31:15

标签: node.js chat socket.io

我正在建立一个小聊天。

当有人点击进入时,它应该将消息提交给服务器并在插入成功时返回一些状态信息。

有没有办法在每个事件上返回一些数据,还是我必须从服务器发起另一个发送,以通知客户端有关状态?

客户端

$('textarea').keypress(function(e) {

    if(e.which == 13) {

                var msg = $.trim(this.value);

                if(msg.length > 0) {

                        socket.send(msg, function() {

                             // Here I need to have some result
                             // returned by the server to notify the user
                             // if everything went fine
                             //this.value = '';
                        });
                }

                return false;
        }
});

服务器

socket.on('message', function() {

        db.query("INSERT INTO chat (message, ip, time) VALUES (?, INET_ATON(?), NOW())", [msg, socket.handshake.headers['x-forwarded-for'] || socket.handshake.address.address], function(error) {

                if(!error) {
                        io.sockets.send(msg);
                } else {
                        console.log(error);
                }

        });
});

1 个答案:

答案 0 :(得分:0)

我最近遇到过这个问题。我的解决方案是将命令ID放入每条消息中。我构建了一个小函数来在客户端(here)创建一个ID。所以流程看起来像这样:

客户

  • 当用户执行需要保存的内容时:
  • 生成命令的ID
  • 生成描述命令的对象
  • 通过套接字将命令发送到服务器

服务器

  • 收到命令消息
  • 应用命令(数据库等)
  • 如果命令成功,请通过套接字将命令ID发送回客户端,并显示“命令完成”消息类型

客户

  • 收到命令完成消息
  • 在客户端将该命令标记为“已完成”

服务器端步骤的代码:

socket.on 'du', (msg) =>
  @saveData(msg, ->
    # broadcast to other users if needed
    socket.emit('cc', msg.data.commandId)
  )
相关问题