经常听到说一个比较复杂点的后台可能使用多种语言完成,比如前段通过nginx将所有请求映射到主语言如java,然后程序的某一个部分可能通过python或者php做的,他们之间如何通信?
我想到的可能通过web api接口的方式,但如果这样的话有结果问题:
1 假如通过request-->nginx-->java--php
那么java模块就需要通过http的方式向php模块发起请求,我想这个会不会造成响应时间的增加?
因为正常情况,就是一个http请求,现在相当于代理了,增加了一个等待时间,这个怎么解决?
2 如果是直接将php的接口暴露给客户端(比如浏览器端)session怎么办
假设整个系统某些功能是需要登陆的,而登陆模块的工作是由java完成,那么php提供的借口怎么验证用户登录?
多语言之间为什么要通讯呢?
请 Google 一下「单点登录」、「SSO」……
这是你疑问的重点。
你看看你的桌面,可能安装了各种程序,比如 QQ、Chrome、IE、sublime、PS、美图秀秀……等等。这些软件使用了不同的语言,有C++、Java、Python,这些语言都在 win32 的平台,其乐融融。
当我们聊 QQ 时,首先,QQ 输入窗口得需要和输入法通讯,我们的每个按键都会被输入法软件拦截,我们输入
sf
,这两个字母不会显示在 QQ 聊天窗口,而是被 Google Input(我使用 Google 输入法)拦截了,然后输入法先处理一下,最后出现候选词,你按下空格,于是「算法」两个字进入了 QQ 聊天窗口。当我们使用 Java 处理后台业务逻辑(Java 最擅长这个了),但是 Java 也有不擅长的东西,这时我们就可以在用户请求到达业务处理之前,例如那些验证、缓存等,可以交给其他语言去处理。
典型的应用有 memcached、MQ、……
再举一个例子,还是 QQ 聊天吧,我们需要发送一个图片了,发送之前我们肯定要用 PS 或者美图秀秀美化一下,美化完成后,保存起来,最后用 QQ 发送。
如果把 QQ 比喻成 Java,那么 PS 就是 Python,美图秀秀就是 PHP,我们的逻辑大部分是 Java 做的,但是 Java 不擅长修图,于是我们使用了 Python 或者 PHP,至于到底是用哪个好呢?语言本身没有好坏之分,看开发者的喜好吧。
处理完后放到哪儿呢?
第一种方式,直接在内存中完成,图片放在临时存储空间:剪切板。第二种方式,放在持久存储空间Persistence,磁盘。
如果是开发网站后台系统,则持久存储空间通常就是 DB,在 Java 三层架构中的持久层,说的就是这个意思。Java 把业务逻辑处理完了,放在数据库中,比如订单信息。
下一步,我们需要处理订单,或者将订单信息发送给客户,可以发送到邮箱、手机、微信、……等终端。在这个子系统中,我们可以使用任何一种语言来完成,而不用去管数据库中的这个订单信息是那种语言产生的。(当我们用 QQ 发送图片的时候,我们也从来没有思考过,这个图片是怎么来的?是网上下载的?是 PS 画的?是用手机照的,还是用单反照的?)
但愿你能听明白。
==END==