Kar*_*lis 5 sockets firefox sml firefox-addon interprocess
我正在创建一个Firefox扩展,允许在Firefox中使用Standard ML(SML)作为客户端编程语言.它的工作方式如下:
以下是DOM库的实现方式:
我的问题是,理论上,在套接字通信方面,我应该期待在性能方面有什么限制?
我做了一些非常近似的分析,似乎在扩展和PolyML之间使用这个接口,我可以大约发送2500条消息/秒,平均大小为70字节/消息.
为了说明这一点,我想在浏览器中使用Canvas元素绘制一些动画.如果我想达到20fps,这意味着我需要在0.05秒内绘制每一帧,这意味着我每帧只能发送大约125条消息.这些消息对应于JavaScript函数调用.例如,下面的代码绘制一个路径并进行9次JavaScript函数调用,这些调用对应于套接字通信中的9条消息.
Run Code Online (Sandbox Code Playgroud)val _ = Canvas.beginPath context; val _ = Canvas.setFillStyle context fillColor; val _ = Canvas.setStrokeStyle context fillColor; val _ = Canvas.setLineWidth context size; val _ = Canvas.moveTo context posx posy; val _ = Canvas.lineTo context posx_new posy_new; val _ = Canvas.stroke context; val _ = Canvas.arc context posx_new posy_new (size/2.0) 0.0 6.28 true; val _ = Canvas.fill context;
显然,JavaScript有更好的性能,我想你可以在0.05秒内完成数千(数百)次Canvas/DOM函数调用,用于绘制帧.
所以,我想我的问题是,您是否有使用套接字通信进行非常快速的消息交换的经验.我想知道2500条小信息/秒(在这种情况下,相当于150千字节/秒)是否正确或者我可能做错了什么.
例如,有人怀疑firefox中的套接字实现(特别是通过JavaScript接口https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIServerSocket使用它)对于这种快速交互并不是很好.例如,从套接字读取是通过事件循环机制完成的.那就是我依靠Firefox ..来通知我有关传入套接字消息的可用性,有时在发送消息和接收它之间有一个很大的(例如250ms)延迟(虽然这似乎只有在firefox忙于做的时候才会发生其他的事情,我对套接字通信的理论限制更感兴趣
你看到的任何想法,想法,任何缺陷?您是否认为使用其他IPC机制会更好,例如管道,实现我从C++ XPCOM组件的通信,而不是从JavaScript,外部函数接口到C(JavaScript和PolyML都有)?
(如果有兴趣的话,该项目位于https://assembla.com/wiki/show/polymlext)
小智 1
TCP 可以调整以获得更高的吞吐量或更快的响应时间。为了获得更高的吞吐量,您需要将套接字缓冲区设置为更大的值。为了使用较小的数据块获得良好的响应时间,您需要设置 TCP_NODELAY 套接字选项。如果经过微调,环回上的 TCP 应该与任何 IPC 机制相同。较新的 Windows 操作系统在环回适配器上进行了特殊优化,例如增加 MTU 大小等,以使其更快。
| 归档时间: |
|
| 查看次数: |
1213 次 |
| 最近记录: |