在Ruby中构建一个Linux服务,其他进程可以通过套接字进行交互?

时间:2012-03-08 22:07:34

标签: ruby linux api sockets

我正着手构建一个在后台运行的服务,允许客户端连接和发送命令,并获取数据。我计划用Ruby编写服务(作为宝石),但想知道允许客户连接到API的最佳方法是什么?

我认为套接字连接是有意义的,就像你连接Redis或其他东西一样,但我不知道从哪里开始!

任何提示都会非常感激:)

4 个答案:

答案 0 :(得分:2)

是的,你走在正确的道路上。套接字只是一个双向通信通道,允许两个程序交换字节。如果两个端点都在同一台机器上,那么UNIX套接字是显而易见的选择;否则,您需要一个TCP套接字才能通过网络进行通信。在任何一种情况下,原则都是相同的。

在套接字的顶部,您必须定义自己的协议,或者如果它适用于您的情况,您可以使用现有协议(例如HTTP)。

A random sockets tutorial.

答案 1 :(得分:2)

既然你要求任何提示,我建议你建立一个服务容器是一项艰苦的工作。既然你实际上并不需要,那里已经有很多很棒的服务容器了,你应该使用其中的一个。

我会推荐HTTP背后的东西,它为您提供了很多优势,包括现有工具,消息框架,内容协商,扩展服务以及部署和升级模型。

如果你想避免外部依赖,使用像纯Ruby这样的Webrick或Mongel这样的东西是避免需要在你的系统中包装Apache或Nginx的好方法。

这也允许您分离项目中的问题:首先构建实际服务层,处理命令和返回响应。在任何Web服务器下运行它,然后继续运行。

然后,当您有时间时,请分别关注如何构建服务容器以满足您的需求:因为您知道底层服务层工作正常,您可以专注于解决容器问题。

如果您确实想构建自己的容器,我强烈建议您使用比套接字更高级别的东西。像0mq这样的工具提供了你无法从套接字获得的框架和其他消息层功能,并且更容易专注于定义问题空间的有趣部分 - 命令 - 而不是像低级细节那样解析有线格式和协议。

答案 2 :(得分:0)

我正在使用Ruby / Rails应用程序,Redis在EC2服务器(Amazon Web Services AWS)的后台运行。这是我发现最容易使用的ubuntu版本:

Linux version 2.6.32-341-ec2 (buildd@crested) (gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5) ) #42-Ubuntu SMP Tue Dec 6 14:56:13 UTC 2011

在执行大部分轮询/搜索的主.rb文件中,我需要使用这个rubygems,你一定要查看它们:

require 'aws'
require 'redis'
require 'timeout'
require 'json'

如果这对您没有帮助,请告诉我您的具体操作。祝你好运!

答案 3 :(得分:0)

我过去曾为EventMachine制作了几个守护进程。它高效且功能强大,支持TCP,HTTP和其他所有功能。人们甚至在其上面写上web servers