Python和JavaScript是当今编程界最流行的两门语言和最大的开发生态系统。Python以其简单易上手、强大的数据处理与科学计算能力,以及海量的库资源深受开发者喜爱。而JavaScript作为事件驱动的异步语言,在网页交互、UI动态效果以及网络请求处理方面表现出色。然而,尽管Python和JavaScript各自拥有强大的优势,连接它们却是一项艰难的任务。想象一下,你有一个用Python编写的人工智能神经网络,并希望通过JavaScript来展示可视化使用界面,或者使用Python控制的物理实验,想要通过网页进行远程控制。这种跨语言通信默认情况下并不简单。此外,微服务架构和分布式系统中也常常需要在不同语言之间传递数据和调用方法。
许多框架和工具都试图解决这个问题,比如gRPC、Thrift、Flask等,但它们都需要一些复杂的配置和学习成本,至少你得学习一下http通信协议吧?对于小项目或者科研场景,学习和配置这些框架甚至会超过业务本身。而我,喜欢简单的东西。
Introducing SRPC!
在长期的微项目实践中,我们发现最好的通信代码就是没有代码! 使用SRPC,你完全不需要进行任何配置,不需要明确的schema,不需要懂网络连接,甚至不需要安装任何依赖。 只需要三行代码就能让你的Python和JavaScript互相对话。是不是听上去有点难以置信?让我们一探究竟。继续往下看,你会惊讶于它的简单。
服务端(Python为例)
首先来看看我们在Python服务器端的代码。想象一下你有一个非常精彩的Python函数(这里用add举例),你希望JavaScript能通过网络调用它:
def add(a, b):
return a + b
怎么做呢?从代码仓库中复制server.py
放到你的Python脚本旁边,然后修改代码为:
def add(a, b):
return a + b
from server import srpc
srpc() # 默认监听端口11111
srpc["add"] = add # 暴露函数
可以看到,在新增的三行代码中,srpc
就像是一个Python字典,你可以直接把函数加入其中。
客户端(JS为例)
接下来是JavaScript客户端的代码,和服务端类似,从我们的代码仓库中复制client-es.js
放入JavaScript项目中(你也可以找到其他JavaScript环境的客户端脚本,例如CommonJS或CDN引入,详见代码仓库的README):
import srpc from './client-es.js'
srpc('http://localhost:11111/') // 服务端接入点(本地为例)
就这样,我们在客户端指定了服务端的位置。然后呢?你猜怎样才能调用Python中写的函数?直接调用!
import srpc from './client-es.js'
srpc('http://localhost:11111/') // 服务端接入点(本地为例)
const res = await srpc.add(1, 2)
console.log(res) // 3
Python服务端中的srpc
就好像是和JS客户端中的srpc
连通了一样,你在服务端放入其中的函数,就可以直接在客户端调用!实际上,你传入的参数被网络传输到服务端,add
函数实质上在Python程序中运行,而函数的返回结果又回到了客户端。不需要任何额外的配置和特殊的语法,你已经成功建立了Python服务端和JavaScript客户端间的通信!是不是超级简单?
你猜到了吗?客户端调用远程函数简直和调用本地函数一样简单!在开发应用的过程中,你完全感受不到网络通信,只需要填写服务端的网络位置,然后直接调用函数。是的,就是这样简单!
更强大的是,SRPC提供Python和JavaScript任意组合的服务端和客户端,你可以实现Nodejs和前端的通信,也可以实现Python程序之间的通信。详情请查看代码仓库的README!
记得给我一颗Github Star哦!感谢!