Chrome打包应用中的Websocket服务器

18

我正在Chrome封装应用程序中构建一个WebSocket服务器。我已经完成了所有工作(握手和从客户端接收),但是,当我尝试从服务器向客户端发送消息时,总是会出现错误:“失败:服务器不得对发送给客户端的任何帧进行掩码处理。”

这是我的prepareMessage代码:

  var sendText = _toUTF8Array(JSON.stringify(msg) + '\n');
  var aa;
  var buffer;
  if (sendText.length > 125) {
      if (sendText.length < 65536) {
          aa = new ArrayBuffer(4 + sendText.length);
          buffer = new Uint8Array(aa);
          buffer[0] = 129;
          buffer[1] = 126;
          buffer[2] = sendText.length >> 8;
          buffer[3] = sendText.length & 255;
          _arrayCopy(sendText, 0, buffer, 4, sendText.length);
      }
      else {
          aa = new ArrayBuffer(10 + sendText.length);
          buffer = new Uint8Array(aa);
          buffer[0] = 129;
          buffer[1] = 127;
          var len = new Uint8Array(8);
          len = _Uint64ToUint8(sendText.length);
          var tt = new Uint8Array(8);
          for (var i = 0; i < 8; i++)
          {
              tt[7 - i] = len[i];
          }
          _arrayCopy(tt, 0, buffer, 2, 8);
          _arrayCopy(sendText, 0, buffer, 10, sendText.length);
      }
  }
  else {
      aa = new ArrayBuffer(2 + sendText.length);
      buffer = new Uint8Array(aa);
      buffer[0] = 129;
      buffer[1] = sendText.length;
      _arrayCopy(sendText, 0, buffer, 2, sendText.length);
  }
  return aa;

已经使用C#客户端进行了测试(仅为了查看字节),一切正常。第二个字节的第一位(掩码)是“0”,因此不应该说它被掩码处理。 - Caio Keto
1
为了找到问题,您需要在三种情况下进行测试。长度小于125、介于125和65536之间以及超过这个范围。这样您就可以找到代码的哪个部分出了问题。除此之外,我在您的代码中没有发现任何问题。它似乎与Draft10和Draft17兼容。只需确保您的逻辑运算符正在执行其预期的操作即可。 - Mehran
看看这个问题的讨论,看看是否有帮助。http://code.google.com/p/phpwebsocket/issues/detail?id=55 - John Faulkner
4
我有这个问题已经有一段时间了。看看数据框架。这是我用来解决这个问题的网站。简单地说,您正在使用服务器意外的编码。http://tools.ietf.org/html/rfc6455#page-27 - Logan Murphy
2个回答

1

-4
请确保您已在IIS测试环境中启用了WebSocket协议。
控制面板-->Windows功能-->IIS-->WS模块

这是关于在JavaScript中实现WebSocket服务器,而不是从JavaScript访问WebSocket服务器。这与IIS或任何其他Web服务器无关。 - Piper McCorkle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接