在wss安全模式下运行时,铬的明显差的websocket性能

时间:2014-06-23 11:03:03

标签: google-chrome websocket chromium

我似乎遇到了一些问题,表明wss安全网页框在Chrome上比IE和Firefox慢得多。我环顾四周但找不到任何真实的信息来确认别人看到这种行为。

总结: 我使用localhost C ++ websocket服务器进行原型设计,将单个二进制图像png帧发送到在同一台机器上打开的网页。这必须是websockets的安全wss版本。

我无法真正流式传输视频并使用视频标签,因为延迟/延迟必须最小化。

其中一个潜在的限制因素是websocket连接将提供多少数据吞吐量。目前仅用于原型设计,我使用mongoose作为服务器。服务器似乎不是限制因素,它似乎是Chrome wss websocket处理。

测试我的高级规格开发机器只是通过websocket发送数据。目前我并没有尝试对传递的实际数据做任何事情。 客户端发送一个wss client->服务器字符串,说" pull"。 服务器回复wss服务器 - 客户端1兆字节二进制blob。 客户端用wss客户端 - 服务器字符串回复说" pull"。 服务器回复wss服务器 - 客户端1兆字节二进制blob。 ..等等...

以下是安全和不安全的websockets每秒获得的二进制帧数:

IE(v10)wss:120 ws:221

Firefox(第28版)wss:65 ws:170

Chrome(v35)wss:17 ws:93

你可以看到,与其他人相比,chrome wss的表现似乎很差。我在3台计算机上尝试过这种方法,结果相似。我已经尝试了0.1 MB到100 MB的不同blob大小,这对实际数据速率吞吐量没有实际影响。我尝试过禁用Nagle的算法。

有没有人对我可能遗失的事情有任何想法? 任何人都可以确认Chrome的性能可能很差吗?

感谢

马特


更多信息:

评论之后:我启用了' #enable-websocket-experimental-implementation',但似乎没有任何区别。我也尝试过最新的镀铬金丝雀版本,但这似乎没有任何区别。

更多信息:

使用64位调试服务器在我的开发机器上使用我的开发机器(每秒周期数)获得更多结果。发送"拉"到服务器,用任意二进制1000000字节缓冲区回复。 尝试每个客户端使用2个套接字,每个套接字使用不同的子协议。

IE(v10):wss:120 ws:221 wss [2 websockets]:176

Firefox(第28集):wss:65 ws:170 wss [2 websockets]:59

Chrome(v35)wss:17 ws:93 wss [2 websockets]:18

使用2个websockets,IE似乎显着加快了速度。 Firefox和Chrome没有。


1 个答案:

答案 0 :(得分:2)

在来自chromium-discuss的反馈之后,很多速度差异似乎是由于客户端和服务器之间协商的密码。

为了确认这一点,我尝试将服务器密码硬编码为SSL_CTX_set_cipher_list(ctx," AES128-SHA");然后帧速率如下:

Chrome版本35.0.1916.153 m:49.75 Chrome版本38.0.2068.0金丝雀(64位):53.15 Firefox版本30.0:61.8 IE 30.0:68.21

尽管存在一些差异,但所有浏览器的速度现在都在同一个球场。在这种情况下,我控制服务器,并能够决定一个合适的密码列表。