NodeJS套接字数据拆分

时间:2012-05-07 15:47:21

标签: javascript node.js sockets

当我需要分割数据时,我必须将其转换为字符串 这是我的数据处理函数:

  socket.on('data', function (data) {
    var str = data.toString().split("|");
    switch(str[0]){
        case "setUser":
        setUser(str[1], socket);
        break;
        case "joinChannel":
        joinChannel(str[1], socket);
        break;
    }

  });

当我从AS3客户端发送“setUser | Name”等数据然后“joinChannel | main”时。 NodeJS将其读作一个数据包 我的问题是如何将其作为两个不同的数据包?

1 个答案:

答案 0 :(得分:2)

通常,您会将所有数据缓冲在一起,然后将其解析为一个字符串。或者如果你需要在它进入时分配它,那么你将在data回调中进行拆分并跟踪任何剩余的部分命令以预先接收到的网络块。

var data = '';
socket.setEncoding('utf8');
socket.on('data', function(chunk) {
  data += chunk;
});
socket.on('end', function() {

  var lines = data.split('\n');
  lines.forEach(function(line) {
    var parts = line.split('|');
    switch (parts[0]) {
      case 'setUser':
        setUser(str[1], socket);
        break;
      case 'joinChannel':
        joinChannel(str[1], socket);
        break;
    }
  });
});