2010-07-04 49 views
3

我主要是在PHP的工作,喜歡這樣做,因爲,似乎有更多的就業機會在這門語言,至少在我的領域(我仍然相當新的它,因此我想繼續學習更好的語言)..但對於我想要做的一些事情,我需要使用WWW機械化庫,它不能與PHP一起工作,但可以與Ruby一起工作(是的,我知道PHP有一些替代品,但我有嘗試過他們,他們不爲我工作,所以我需要這樣做),所以我想用PHP寫大部分應用程序,然後在需要使用該庫時調用Ruby,然後將信息傳回給PHP,是的,我知道這將是「慢」,但在這種情況下,那不是一個問題,因爲這不是一個公共的Web應用程序,它只是用於商業用途..通訊,PHP應用程序和Ruby應用程序之間傳遞信息

我想知道最好的辦法是什麼最佳屁股2種語言之間的信息..我想用HTTP POST(像捲曲的PHP)做到這一點的,但不知道這是最有效的方式任何..任何信息表示讚賞,感謝

回答

4

有兩種不同的方式,我會這樣做:

\ 1。在ruby中,建立一個只偵聽'::'(或127.0.0.1,如果你不喜歡ipv6)的非HTTP服務器。然後,每當您的PHP腳本需要做某件事時,它都可以連接到服務器並將數據傳遞給它。這將是最快的解決方案,因爲每次PHP需要做某件事時,ruby腳本都不需要啓動。

例紅寶石:

require 'mechanize' 
require 'socket' 

def do_mechanize_stuff(command, *args) 
    case command 
    when 'search_google' 
    # search google with args.join(' ') 
    when 'answer_questions_on_stackoverflow' 
    # answer questions on stackoverflow 
    # with mechanize 
    end 
    'the result to pass to PHP' 
end 

srv = TCPServer.new '::', 3000 

loop do 
    Thread.new(srv.accept) do |sock| 
    sock.write(
     do_mechanize_stuff *sock.gets.split(' ') 
    ) 
    sock.close 
    end 
end 

例紅寶石客戶端:(你需要這個翻譯成PHP)

require 'socket' 

# This is a script that searches google 
# and writes the results to stdout. 

s = TCPSocket.new 'localhost', 3000 

s.puts 'search_google how to use a keyboard' 

until (r = s.gets).nil? 
    print r # a search result. 
end 

你可以使用像http://god.rubyforge.org/過程看工具,保持服務器運行。

\ 2。使ruby腳本成爲一個命令行工具,並使用PHP中的exec來調用它。

一個示例命令行腳本:

require 'mechanize' 

def do_mechanize_stuff(command, *args) 
    # ... from previous example 
end 

do_mechanize_stuff ARGV.shift, ARGV 
+0

感謝,我會嘗試 – Rick 2010-07-04 18:46:53

1

我會建議遵循軟件即服務架構(SOA)並將Ruby/Rails應用程序作爲單獨的進程運行。你必須在兩者之間開發一個API(一個非常簡單的API):使用POST/GET,你首先想到的是一個正確的方式去這裏。

+0

謝謝,我會考慮SOA ..我只是使用Ruby,Rails的不是因爲我不需要在Ruby端作爲該框架我認爲這不僅會使用第三方庫,除非它支持它本身複雜,因此我不得不考慮這樣做 – Rick 2010-07-04 18:17:31

+0

我會建議使用Rails(這是不是順便說一下第三方),這將提供一個很好的模型/ view/controller框架和HTTP綁定,因爲你的API將基於HTTP。您還可以查看RESTful APIS。這將簡化了很多東西(CRUD類似API的風格) – Zepplock 2010-07-04 18:33:35

+0

我的意思是該庫的第三方,而不是軌 – Rick 2010-07-04 18:45:57

相關問題