亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

學習札記———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

六枝特区| 略阳县| 固阳县| 顺平县| 梁山县| 湖州市| 水富县| 精河县| 白河县| 青川县| 鹤峰县| 虹口区| 本溪市| 泽库县| 林周县| 鄱阳县| 西宁市| 深圳市| 阳曲县| 华宁县| 佛学| 文登市| 城固县| 寿宁县| 思茅市| 阜南县| 绿春县| 南皮县| 奉贤区| 永城市| 沐川县| 榆社县| 新巴尔虎左旗| 澄迈县| 浦城县| 鄱阳县| 樟树市| 蓬莱市| 丹东市| 吕梁市| 江达县|