中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

建昌县| 沂水县| 武宣县| 巴南区| 屏东市| 泾川县| 罗田县| 松原市| 迁西县| 广宁县| 延边| 湖口县| 城市| 凤城市| 墨竹工卡县| 桐柏县| 平定县| 余干县| 腾冲县| 泽州县| 屏山县| 靖边县| 台中县| 辽阳县| 竹溪县| 安仁县| 勐海县| 五指山市| 舟曲县| 珲春市| 神农架林区| 原阳县| 罗田县| 北票市| 中江县| 余江县| 苗栗市| 信丰县| 杂多县| 方正县| 黄冈市|