声明: 此文翻译自WebSockets in Ruby, 限于本人才疏学浅,其中有翻译不当之处,敬请指出,感激不尽!
在我的主要工作中,需要构建一个一直占用相当大CPU时间片的数据系统。这个任务主要用于在地理编码以及local reference system(本地地理系统?)之间进行编码以及解码。举个例子,这个工作将帮助我们在系统中标记一条对应于街道上某个地点的记录,并且可以知道本地地理位置所对应的坐标。
在第一次的尝试中,我开发了一个用于地理编码的Ruby库以及一个简单的基于Sinatra的web服务。当时我的解决方案表现得还不错,直到后来客户要求对每一个鼠标滑过的事件进行交互。这个需求上的更改让我不得不再一次通过Javascript语言去构建一个同样用于地理编码的基础构件,在之后的一段时间里,一切也都表现得非常好。
而意料之中的是,我们再一次决定在系统中允许每个用户与多个街道关联。现在,每次下载800KB的数据(存储在索引数据库中,用于记录最新的会话信息)尚且可以承受;但是潜在上来说,几个MB的数据将是致命的,甚至软件也有可能在会话的响应之前被使用-而这只是用户所期待的功能之一。
我知道我们必须寻找一个完美的解决方案,并且使一切都是可以管理控制的。在以前,我涉足过WebSocket领域(比如node.js以及Socket.IO)并且知道相关的底层知识。从之前的搜索中,我意识到Ruby在这方面的欠缺,我很快又考虑通过在节点上的Javascript端口来实现需求。这样的想法使我非常激动。
可选方案
第一步是找出可用的方案。以下列举我找到的:
- sinatra-websocket
- faye