2010-07-04 164 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

相关问题