91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

學習札記———thrift在RubyOnRails工程實踐實錄

發布時間:2020-07-21 15:18:35 來源:網絡 閱讀:376 作者:JackSongBlack 欄目:編程語言
關于thrift 使用雖然語法簡單但是在實踐中還是出了一些問題,主要問題存在于我對ruby語法的不了解,下面就是我的實踐實錄
../xml.thrift
\**
*namespace 是命令空間 但是關于ruby的空間視乎還是有些問題
**\
namespace ruby XmlThrift
namespace java com.shsz.young.thrift.proto
\**
* 類型結構體
**\
struct Xmltype{
1:string xml
}
\**
*意外處理數據結構體
**\
exception InvalidOperation {
    1: string errors
}
\**
*提供服務
**\
service XmlResponce{

string input(1:string xml)throws(1: InvalidOperation errors), \*throws 是指發生意外返回的情況
string output(1:string xml)throws(1: InvalidOperation errors),

oneway void push() \* oneway 是指單邊處理

}
然后執行
thrift -r --gen rb xml.thrift
生成文件應該由一下三個

xml_constants.rb
xml_responce.rb
xml_types.rb

我主要卡殼在文件載入這個上面,經過google幾番查找后終于尋得法子使用絕對路徑,才能應付,腳本生成的代碼在RubyOnRails工程中還需要修改下 ,主要是引用文件路徑上。原教程在$..push('../ruby_gen')但是在工程中有各種問題,絕對路徑代碼如下

require File.expand_path('../../../gen-rb/xml_types', __FILE__)   

__FILE__ 這句話代表文件在工程的絕對路徑

2.ruby端server實踐代碼

#encoding:utf-8
require 'thrift'
require File.expand_path('../../../gen-rb/xml_types', __FILE__)    \
require File.expand_path('../../../gen-rb/xml_responce', __FILE__)

class XmlServerHandler
    def initialize

    end

    def input(xml)
        puts xml
        'xml'
    end

    def output(xml)
     puts xml
        xml
    end

    def push()
        print "服務器已啟動"
    end
end

def new_server
    handler = XmlServerHandler.new
    processor = XmlResponce::Processor.new(handler)
    transport = Thrift::ServerSocket.new(9090)
    transportFactory = Thrift::BufferedTransportFactory.new()
    server = Thrift::SimpleServer.new(processor, transport, transportFactory)

    puts "Starting the    server..."

    server.serve()
    puts "done."
end

3. ruby端client實踐
#encoding:utf-8


require 'thrift'
require File.expand_path('../../../gen-rb/xml_types', __FILE__)
require File.expand_path('../../../gen-rb/xml_responce', __FILE__)


begin

    transport = Thrift::BufferedTransport.new(Thrift::Socket.new('localhost', 9090))
    protocol = Thrift::BinaryProtocol.new(transport)
    client = XmlResponce::Client.new(protocol)

    transport.open()


    # Run a remote calculation
    puts client.input('xml')    #it accessing the ruby server program method calc via thrift service

    puts client.output('xml')
    #Run a Async call
    client.push()

    transport.close()
rescue
    puts $!
end
這里比較突出的是begin  rescue end 語法,他的意思是 首先執行begin 包裹的代碼,如果出現意外則執行rescue包裹的代碼


另外 初次接觸了ruby多線程編程

簡單開辟新線程的方式是

thread =Thread.New() 括號里可包裹你要執行的方法
但是只是這樣還是不行的,在ruby中,當主線程執行完后,會殺死所有子線程所有還需要用jion這個關鍵字來讓主線程等待子線程執行完
 
thread .jion

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

瑞昌市| 巩义市| 保定市| 林甸县| 泸水县| 札达县| 乐业县| 水富县| 平舆县| 富裕县| 霍林郭勒市| 隆子县| 南宁市| 固安县| 礼泉县| 呼伦贝尔市| 永善县| 清原| 望江县| 贵南县| 徐汇区| 花莲市| 瓦房店市| 晋宁县| 两当县| 蛟河市| 闸北区| 长宁区| 漠河县| 报价| 宣武区| 安康市| 通海县| 当阳市| 浙江省| 延边| 铜梁县| 竹山县| 健康| 甘泉县| 喀喇沁旗|