我主要使用PHP而且更喜欢这样做,因为这种语言似乎有更多的工作,至少在我的领域(我还是很新的,所以我想继续学习更好的语言) ..但是对于我想要做的一些事情,我需要使用WWW Mechanize库,它不能与PHP一起使用但是使用Ruby(是的我知道PHP有一些替代方案,但我已经尝试过它们并且它们对我不起作用所以我需要这样做),所以我想用PHP编写我的大部分应用程序,然后在我需要使用这个库时调用Ruby,然后将信息传递回PHP,是的,我知道这将是“慢“但这不是一个问题,因为这不是一个公共网络应用程序,它只是为了商业用途..
我想知道在两种语言之间传递信息的最佳方式是什么..我曾想过使用http POST(就像在PHP中使用Curl)来做这个但不确定这是否是最有效的方法..感谢任何信息,谢谢
答案 0 :(得分:4)
我会采用两种不同的方式:
\ 1。在ruby中,设置一个仅侦听'::'的非HTTP服务器(如果你不喜欢ipv6,则设置为127.0.0.1)。然后,每次PHP脚本需要执行某些操作时,它都可以连接到服务器并将数据传递给它。这将是最快的解决方案,因为每次PHP需要执行某些操作时都不需要启动ruby脚本。
示例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
示例Ruby客户端:(您需要将其转换为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
答案 1 :(得分:1)
我建议遵循软件即服务架构(SOA)并将Ruby / Rails应用程序作为单独的进程运行。你必须在两者之间开发一个API(一个非常简单的API可以工作):使用POST / GET,因为你认为这是一个正确的方法。