ruby中如何创建socket连接,有没有详细的资料、例子?

Python018

ruby中如何创建socket连接,有没有详细的资料、例子?,第1张

// server

require 'socket'

socket = UDPSocket.new

socket.bind("127.0.0.1", 12345)

loop do

msg, sender = socket.recvfrom(100)

host = sender[3]

puts "#{Time.now}: #{host} '#{msg}'"

end

// client

require 'socket'

log = UDPSocket.new

log.connect("127.0.0.1", 12121)

log.print "Up and Running!"

log.print "Done!"

假设您有一个可以工作的 Ruby 应用程序,并且需要向其添加电子邮件传递功能。这可能与用户身份验证或任何其他类型的事务性电子邮件有关,这没有什么区别。本教程旨在帮助您实现使用 Ruby 发送电子邮件

用 Ruby 发送电子邮件的选项

大多数情况下,你可以从三个选项中选择一个。

最简单的方法是使用 Net: : SMTP 类。它提供了通过 SMTP 发送电子邮件的功能。该选项的缺点是 Net: : SMTP 缺少撰写电子邮件的功能。你可以自己创建,但这需要时间。

第二种选择是使用专用的 Ruby gem,如 Mail、 Pony 或其他。这些解决方案使您能够以简单有效的方式处理电子邮件活动。Action Mailer 是一个完美的电子邮件解决方案,通过 Rails 的棱镜。而且,很有可能,这将是你的选择。

第三个选项是类 Socket。通常,这个类允许您设置流程之间或流程内部的通信。因此,电子邮件发送也可以用它来实现。然而,事实是 Socket 并没有为您提供广泛的功能,您也不太可能想要使用它。

现在,让我们尝试使用所描述的每个解决方案发送电子邮件。

如何通过 Net: : SMTP 在 Ruby 中发送电子邮件

根据我的经验,在一个普通的 web 应用程序中使用这个选项是不常见的。但是,如果您在某些物联网设备上使用 mruby (Ruby 语言的一种轻量级实现) ,那么通过 Net: : SMTP 发送电子邮件可能是合适的。此外,如果在无服务器计算中使用,例如 AWS Lambda,它也会这样做。首先查看这个脚本示例,然后我们将详细介绍它。

Ruby 露比

这是一个通过 SMTP 发送文本电子邮件的简单示例(可以在这里找到官方文档)。您可以看到四个标题: 发件人、收件人、主题和日期。请记住,您必须将它们与电子邮件正文中的空行分开。同样重要的是连接到 SMTP 服务器。

Net::SMTP.start('your.smtp.server', 25) do |smtp|

Start (‘ your.smtp.server’,25) do | smtp |

自然,这里将显示您的数据,而不是“ your.smtp.server”,并且25是默认端口号。如果需要,可以指定其他详细信息,如用户名、密码或身份验证方案(普通、登录和 cram _ md5)。它可能看起来如下:

`Net::SMTP.start('your.smtp.server', 25, ‘localhost’, ‘username’, ‘password’ :plain) do |smtp|`

在这里,您将使用纯文本格式的用户名和密码连接到 SMTP 服务器,客户机的主机名将被标识为 localhost。

之后,可以使用 send _ message 方法并将发送方和接收方的地址指定为参数。

Start (‘ Net: : SMTP.start (‘ your.SMTP.server’,25) do | SMTP |’)的块形式将自动关闭 SMTP 会话。

在 Ruby Cookbook 中,使用 Net: : SMTP 库发送电子邮件被称为极简主义,因为您必须手动构建电子邮件字符串。尽管如此,这并不像你想象的那样没有希望。让我们看看如何用 HTML 内容增强电子邮件,甚至添加附件。

在网上发送 HTML 电子邮件: : SMTP

查看这个引用消息部分的脚本示例。

Ruby

除了消息体中的 HTML 标记之外,我们还有两个额外的头: MIME-Version 和 Content-type。MIME 指的是 MIME。它是 Internet 电子邮件协议的扩展,允许您在单个消息体中组合不同的内容类型。MIME-Version 的值通常为1.0。它指示消息是 MIME 格式的

至于 Content-type 头,一切都很清楚。在我们的示例中,有两种类型-HTML 和纯文本。另外,确保使用定义的边界分隔这些内容类型。

除了 MIME-Version 和 Content-type,您可以使用其他 MIME 头:

内容-传输-编码-表示二进制到文本的编码方案(7位、 Quoted-printable、 base64、8位或二进制)。

在网上发送带附件的电子邮件: : SMTP

- Content-Disposition-指定表示样式(内联或附件)

让我们添加一个附件,例如 PDF 文件。在这种情况下,我们需要将 Content-type 更新为 multipart/mix。另外,使用 pack (“ m”)函数用 base64编码对附加文件进行编码。

Ruby

之后,你需要定义你的电子邮件的三个部分。

第1部分-主要标题

第2部分-消息行动

第三部分-附件

现在,我们可以把所有的部分放在一起,并最终确定剧本。这就是它看起来的样子:

Ruby

我可以发送电子邮件给多个收件人在网络: : SMTP?

当然,你可以. send _ message 期望第二个和随后的参数包含收件人的电子邮件。例如:

Ruby

发送电子邮件的最佳 Ruby Gems

在 Ruby 生态系统中,您可以找到特定的电子邮件 gems,它们可以改善您的电子邮件发送体验。

Ruby Mail

该库旨在提供一个单点访问管理所有电子邮件相关活动,包括发送和接收电子邮件。

Pony

您可能听说过一个关于用一个命令发送电子邮件的童话故事。抓紧你们的帽子,因为它是真的,由小马宝石提供。

ActionMailer

这是最流行的宝石发送电子邮件在 Rails 上。如果你的应用程序写在上面,ActionMailer 肯定会出现。它允许您使用邮件类和视图发送电子邮件

使用邮件陷阱测试使用 Net: : SMTP 的电子邮件发送

设置非常简单。进入演示收件箱后,复制 SMTP“设置”选项卡上的 SMTP 凭据并将其插入到代码中。或者,您可以在 Integrations 部分获得一个简单消息的即用模板。只要选择一种编程语言或框架,你的应用程序是建立。

Ruby

如果一切正常,您将在邮件陷阱演示收件箱中看到您的消息。此外,您可以尝试检查您的 HTML 内容和附件的电子邮件。

您刚刚阅读了关于如何使用 Ruby 测试和发送电子邮件的完整教程。希望您喜欢!

转自: http://www.diggerplus.org/archives/3110

<h2>引言</h2>

<p>你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据?你是否在为异构系统的不同进程间相互调用、通讯的问题而苦恼、挣扎?如果是,那么恭喜你,消息服务让你可以很轻松地解决这些问题。<br />

消息服务擅长于解决多系统、异构系统间的数据交换(消息通知/通讯)问题,你也可以把它用于系统间服务的相互调用(RPC)。本文将要介绍的RabbitMQ就是当前最主流的消息<a href="http://www.diggerplus.org/archives/tag/%e4%b8%ad%e9%97%b4%e4%bb%b6" title="中间件">中间件</a>之一。</p>

<h2>RabbitMQ简介</h2>

<p>AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的<a href="http://www.diggerplus.org/archives/tag/%e4%b8%ad%e9%97%b4%e4%bb%b6" title="中间件">中间件</a>设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。<br />

AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。<br />

RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。<br />

下面将重点介绍RabbitMQ中的一些基础概念,了解了这些概念,是使用好RabbitMQ的基础。</p>

<h2>ConnectionFactory、Connection、Channel</h2>

<p>ConnectionFactory、Connection、Channel都是RabbitMQ对外提供的API中最基本的对象。Connection是RabbitMQ的socket链接,它封装了socket协议相关部分逻辑。ConnectionFactory为Connection的制造工厂。<br />

Channel是我们与RabbitMQ打交道的最重要的一个接口,我们大部分的业务操作是在Channel这个接口中完成的,包括定义Queue、定义Exchange、绑定Queue与Exchange、发布消息等。</p>

<h2>Queue</h2>

<p>Queue(队列)是RabbitMQ的内部对象,用于存储消息,用下图表示。<br />