chrome 打包应用程序中的 Websocket 服务器

Posted

技术标签:

【中文标题】chrome 打包应用程序中的 Websocket 服务器【英文标题】:Websocket server in chrome packaged app 【发布时间】:2013-06-28 17:39:54 【问题描述】:

我正在用 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',所以不应该说它被掩码了。 为了找到问题,需要分三种情况进行测试。消息长度小于 125,介于 125 和 65536 之间,甚至更多。这样您就可以找到代码的哪一部分不起作用。除此之外,我在您的代码中看不到任何问题。它似乎与 Draft10 和 Draft17 兼容。只需确保您的逻辑运算符正在做他们应该做的事情。 查看该问题的讨论,看看是否有帮助。 code.google.com/p/phpwebsocket/issues/detail?id=55 这个问题我有一段时间了。看数据框架。这是我用来解决这个问题的网站。很简单,您正在使用服务器意外的编码。 tools.ietf.org/html/rfc6455#page-27 【参考方案1】:

您应该使用wireshark 来查看您的数据包有什么问题! 看看https://github.com/mik3fly-4steri5k/groschat,我目前正在研究 websockets,它在 google chrome 上完美运行。

【讨论】:

【参考方案2】:

确保您已在 IIS 测试环境中启用 WebSocket 协议。

控制面板 --> Windows 功能 --> IIS --> WS 模块

【讨论】:

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

以上是关于chrome 打包应用程序中的 Websocket 服务器的主要内容,如果未能解决你的问题,请参考以下文章

是否可以向 Chrome 中的现有 websocket 连接发送消息?

Chrome 61 上 webworker 中的 HTML5 安全 websocket 连接

chrome 打包应用程序中的 JSON 模式验证

Chrome扩展中的Socket通信问题

如何更改 chrome 打包的应用程序 ID 或者为啥我们需要 manifest.json 中的 key 字段?

连接到 WebSocket 时如何覆盖 Chrome 中的 Origin 标头?