Ruby在线运行

版本:

所属目录
点击了解高性能代码运行API
运行结果
教程手册
代码仓库
极速运行
终端运行
图形+终端

                        
以下是用户最新保存的代码
万年历的程序编写 发布于:2024-11-10 21:40 改变变量值 发布于:2023-11-12 13:51 用于修改加入类的方法,动态元编程。 发布于:2023-11-12 11:08 Ruby in inheritance 发布于:2023-11-11 23:52 Object and Encapsulation 发布于:2023-10-25 18:02 Ruby数组,例子。 发布于:2023-10-12 21:33 If condition 发布于:2023-10-03 17:01 测试 基础概念 发布于:2023-09-17 16:22 java属性set or build 发布于:2023-05-24 15:48 一所文档转java字段 发布于:2023-04-11 15:22 文档转sql 发布于:2023-12-02 18:47 特殊供应商数据解析--江涛 发布于:2023-02-28 16:44 # 测试ruby代码 发布于:2023-02-15 17:08 化合物临时表插入 发布于:2023-01-30 11:16 dj最短路算法 发布于:2022-11-03 14:09 用嵌套for和嵌套while打印九九乘法表 发布于:2022-09-28 10:36 掌握ruby中的实例变量与类变量 发布于:2022-09-27 17:11 Ruby允许用户在定义方法时以等号(=)结束。 以及两种格式化指示符的用法 发布于:2022-09-14 10:09 测试ruby简易加密 发布于:2022-09-13 20:51 枚举转json 发布于:2023-04-11 14:49 多行转逗号带字符串 发布于:2023-02-17 14:57 多行转逗号 发布于:2023-02-14 15:25 sql表结构转文档 发布于:2022-03-31 13:17 医学影像三维重建系统 发布于:2022-01-17 23:39 医学影像三维重建系统 发布于:2022-01-17 23:38 医学影像三维重建系统 发布于:2022-01-17 23:36 ruby md5+base64加密 发布于:2022-01-11 22:01 gitlab job trace 发布于:2021-03-28 13:26 until语句 发布于:2020-07-08 16:10 主成分分析 发布于:2020-06-20 10:38 Ruby test 1. 类定义,对象初始化,方法调用。 发布于:2020-06-05 09:55 [更多]
显示目录

Web Services 应用 - SOAP4R



学习嵌入式的绝佳套件,esp8266开源小电视成品,比自己去买开发板+屏幕还要便宜,省去了焊接不当搞坏的风险。 蜂鸣版+触控升级仅36元,更强的硬件、价格全网最低。

点击购买 固件广场

Ruby Web Services 应用 - SOAP4R


什么是 SOAP?

简单对象访问协议(SOAP,全写为Simple Object Access Protocol)是交换数据的一种协议规范。

SOAP 是一种简单的基于 XML 的协议,它使应用程序通过 HTTP 来交换信息。

简单对象访问协议是交换数据的一种协议规范,是一种轻量的、简单的、基于XML(标准通用标记语言下的一个子集)的协议,它被设计成在WEB上交换结构化的和固化的信息。


SOAP4R 安装

SOAP4R 由Hiroshi Nakamura开发实现,用于 Ruby 的 SOAP 应用。

SOAP4R 下载地址:http://raa.ruby-lang.org/soap4r/

注意:你的ruby环境可能已经安装了该该组件。

Linux 环境下你也可以使用 gem 来安装该组件,命令如下:

$ gem install soap4r --include-dependencies

如果你是window环境下开发,你需要下载zip压缩文件,并通过执行 install.rb 来安装。


SOAP4R 服务

SOAP4R 支持两种不同的服务类型:

  • 基于 CGI/FastCGI 服务 (SOAP::RPC::CGIStub)
  • 独立服务 (SOAP::RPC:StandaloneServer)

本教程将为大家介绍如何建立独立的 SOAP 服务。步骤如下:

第1步 - 继承SOAP::RPC::StandaloneServer

为了实现自己的独立的服务器,你需要编写一个新的类,该类为 SOAP::RPC::StandaloneServer 的子类:

class MyServer < SOAP::RPC::StandaloneServer   ............... end

注意:如果你要编写一个基于FastCGI的服务器,那么你需要继承 SOAP::RPC::CGIStub 类,程序的其余部分将保持不变。

第二步 - 定义处理方法

接下来我们定义Web Services的方法,如下我们定义两个方法,一个是两个数相加,一个是两个数相除:

class MyServer < SOAP::RPC::StandaloneServer
   ...............

   # 处理方法
   def add(a, b)
      return a + b
   end
   def div(a, b) 
      return a / b 
   end
end

第三步 - 公布处理方法

接下来添加我们在服务器上定义的方法,initialize方法是公开的,用于外部的连接:

class MyServer < SOAP::RPC::StandaloneServer
   def initialize(*args)
      add_method(receiver, methodName, *paramArg)
   end
end

以下是各参数的说明:

参数 描述
receiver 包含方法名的方法的对象。 如果你在同一个类中定义服务方法,该参数为 self
methodName 调用 RPC 请求的方法名。
paramArg 参数名和参数模式

为了理解 inoutout 参数,考虑以下服务方法,需要输入两个参数:inParam 和 inoutParam,函数执行完成后返回三个值:retVal、inoutParam 、outParam:

def aMeth(inParam, inoutParam)
   retVal = inParam + inoutParam
   outParam = inParam . inoutParam
   inoutParam = inParam * inoutParam
   return retVal, inoutParam, outParam
end

公开的调用方法如下:

add_method(self, 'aMeth', [
    %w(in inParam),
    %w(inout inoutParam),
    %w(out outParam),
    %w(retval return)
])

第四步 - 开启服务

最后我们通过实例化派生类,并调用 start 方法来启动服务:

`myServer = MyServer.new('ServerName', 'urn:ruby:ServiceName', hostname, port)

myServer.start`

以下是请求参数的说明:

参数 描述
ServerName 服务名,你可以取你喜欢的
urn:ruby:ServiceName Here urn:ruby 是固定的,但是你可以为你的服务取一个唯一的 ServiceName
hostname 指定主机名
port web 服务端口

实例

接下来我们通过以上的步骤,创建一个独立的服务:

require "soap/rpc/standaloneserver"

begin
   class MyServer < SOAP::RPC::StandaloneServer

      # Expose our services
      def initialize(*args)
         add_method(self, 'add', 'a', 'b')
         add_method(self, 'div', 'a', 'b')
      end

      # Handler methods
      def add(a, b)
         return a + b
      end
      def div(a, b) 
         return a / b 
      end
  end
  server = MyServer.new("MyServer", 
            'urn:ruby:calculation', 'localhost', 8080)
  trap('INT){
     server.shutdown
  }
  server.start
rescue => err
  puts err.message
end

执行以上程序后,就启动了一个监听 8080 端口的本地服务,并公开两个方法:add 和 div。

你可以再后台执行以上服务:

$ ruby MyServer.rb&


SOAP4R 客户端

ruby 中使用 SOAP::RPC::Driver 类开发 SOAP 客户端。接下来我们来详细看下 SOAP::RPC::Driver 类的使用。

调用 SOAP 服务需要以下信息:

  • SOAP 服务 URL 地址 (SOAP Endpoint URL)
  • 服务方法的命名空间(Method Namespace URI)
  • 服务方法名及参数信息

接下来我们就一步步来创建 SOAP 客户端来调用以上的 SOAP 方法:add 、 div:

第一步 - 创建 SOAP Driver 实例

我们可以通过实例化 SOAP::RPC::Driver 类来调用它的新方法,如下所示:

SOAP::RPC::Driver.new(endPoint, nameSpace, soapAction)

以下是参数的描述:

参数 描述
endPoint 连接 SOAP 服务的 URL 地址
nameSpace 命名空间用于 SOAP::RPC::Driver 对象的所有 RPC .
soapAction 用于 HTTP 头部的 SOAPAction 字段值。如果是字符串是"" 则默认为 nil

第二步 - 添加服务方法

为 SOAP::RPC::Driver 添加 SOAP 服务方法,我们可以通过实例 SOAP::RPC::Driver 来调用以下方法:

driver.add_method(name, *paramArg)

以下是参数的说明:

参数 描述
name 远程web服务的方法名
paramArg 指定远程程序的参数

第三步 - 调用SOAP服务

最后我们可以使用 SOAP::RPC::Driver 实例来调用 SOAP 服务:

result = driver.serviceMethod(paramArg...)

serviceMethod SOAP服务的实际方法名,paramArg为方法的参数列表。

实例

基于以上的步骤,我们可以编写以下的 SOAP 客户端:

#!/usr/bin/ruby -w

require 'soap/rpc/driver'

NAMESPACE = 'urn:ruby:calculation'
URL = 'http://localhost:8080/'

begin
   driver = SOAP::RPC::Driver.new(URL, NAMESPACE)

   # Add remote sevice methods
   driver.add_method('add', 'a', 'b')

   # Call remote service methods
   puts driver.add(20, 30)
rescue => err
   puts err.message
end
由JSRUN为你提供的Ruby在线运行、在线编译工具
        JSRUN提供的Ruby 在线运行,Ruby 在线运行工具,基于linux操作系统环境提供线上编译和线上运行,具有运行快速,运行结果与常用开发、生产环境保持一致的特点。
yout