Golang Go语言中写网络基础,Python写逻辑,两种语言如何结合写项目?

发布于 1周前 作者 zlyuanteng 来自 Go语言

Golang Go语言中写网络基础,Python写逻辑,两种语言如何结合写项目?
最近开发一个后端服务器,游戏的
GO 比较适合来写网络交互的
但是写逻辑比较蛋疼
python 这样的语言适合写逻辑
所以想看看有什么方法把两种语言在项目中混合起来开发
但是以前没有做过,没有经验
大家有做过类似项目的,能指点下吗

33 回复

grpc

更多关于Golang Go语言中写网络基础,Python写逻辑,两种语言如何结合写项目?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


别折腾!别折腾!别折腾!

Unix domain socket

游戏后端服务器,用 Python……认真的么……

这么做就是自己把自己搞死

rpc 要做多一次序列化和反序列化,如此浪费不可取

可以考虑一下 go 编译成动态库,然后在 python 里面用

golang skylark

skylark 是 babel 用的语言, 是 python 的 subset. 如果只是写逻辑的话可以试一试, 做个 benchmark 看一看

修正, babel -> bazel

不会 GO 也不会 Python 的能问下为啥 Python 更适合写逻辑?

静态类型语言➕动态脚本嵌入,应该是游戏服务器主流做法吧
某个挺出名的游戏后端框架 skynet 就是这么做的
可以参考楼上说的 skylark

动态语言、鸭子类型,写业务逻辑是可以很爽,更何况 Go 目前还没有泛型,因此 Go 写业务会有点麻烦。

但话又说回来,动态语言如果不认真写 unittest, 维护起来就很容易出问题了,因此也有人说 “动态一时爽,重构火葬场”,就是这个意思。

cgo
c shared library
python ctypes
觉得 ctypes 写着麻烦的话也有通过 header 自动生成的工具

不知道你要什么级别的性能,python asyncio 异步协程已经很成熟,现在瓶颈一般都是网络 io 和数据库 io 了吧

🐷用 Python 的

带 gc 的 Python 调用带 gc 的 Go 提供的库,这样不太稳吧?

网易有话说。。

你以为的性能问题:网络处理能力不行

实际上的性能问题:DB 存取和外部 IO 一塌糊涂

比较成熟的方案就 rpc 。不过同意楼上的别折腾,老老实实用 go 吧

Python 写游戏?楼主你是认真的吗?

为啥不直接都用 go 呢,业务用 python 的好处是啥,go+python 比纯 go 的优点在哪

绝大部分性能损耗在逻辑上,这么做没意义,你想做的可能是中台?中间件?

现在就在这么开发项目,说一下我的处理逻辑吧

1. RPC 这个是完完全全的方案,而且还涉及到旧代码屎山
2. 编译 Go 直接 Python 调用

你想加班吗?

闲的。。。

方案一: go 调用 python 代码。
参考项目: https://github.com/sbinet/go-python

方案二:python 调用 go 的模块
参考阅读: https://cloud.tencent.com/developer/article/1568553
http://chingchuan-chen.github.io/posts/201804/2018-04-16-python-call-go.html

方案三:c/c++ 调用 go && python
1. 把 go 项目编译成动态链接库。
2. c/c++ 调用上一步生成的动态链接库, 外加调用 python 的库,建立 python 的脚本环境。
3. 可能还需要做一个桥 链接两个项目的接口。

是不是 rpc 比较适合简单的整合。
感觉可能适合我。

Go 写业务怎么蛋疼了?如果无法用 Go 写业务建议去掉 Go,因为你不需要它。

不要为了用 Go 而用,用了 Go 基本就不太需要其他语言了,
你去看看几个排名靠前的 Go 开源项目,基本都是纯 Go,
感觉你的思路没有理清楚,要么纯 Python,要么纯 Go 。

如果有个别库只有 Python 有,我会开一个 Python 的微服务,用 gprc 调用它。

项目中,go 一般和 C/CPP 结合,没见过和 py 结合的

好吧,我试试看用纯 GO 来写
我发现我用 GO 写的项目,基本写的我头昏脑胀,出问题,或者根本不知道问题到底在哪里
用 python 写的,我都很轻松,很少出问题

请关注下 chat.osinger.com 最近写的,在 v2 上也好多朋友去看过

前端 Vue+canvas+websocket+protobuf,后端 Golang+websocket+protobuf+goroutine

在结合使用Golang和Python进行项目开发时,可以采取“微服务架构”或“服务拆分”的策略,以充分利用两种语言的优势。

Golang(Go)以其高效的并发处理能力和出色的网络编程支持而闻名,非常适合编写高性能的网络服务器、API网关和数据处理组件。你可以使用Go来构建项目的底层网络通信部分,如HTTP服务器、WebSocket服务、TCP/UDP服务等,这些服务负责数据的接收、处理和转发。

Python则以其简洁的语法、丰富的库和强大的数据处理能力受到青睐,非常适合编写业务逻辑和数据分析部分。你可以利用Python来处理复杂的业务规则、执行数据转换和计算,甚至调用机器学习模型进行预测。

为了将两者结合,你可以采用RESTful API或gRPC等通信协议,让Go服务提供API接口,Python服务通过HTTP或gRPC请求调用这些接口。此外,你也可以使用消息队列(如Kafka、RabbitMQ)进行异步通信,Go服务将数据推送到队列中,Python服务从队列中消费数据进行处理。

在开发过程中,需要注意数据格式的统一(如使用JSON或Protobuf),以及错误处理和日志记录等细节。同时,为了保持项目的可维护性,建议采用清晰的接口定义和文档,以及合理的代码结构和模块划分。

综上所述,通过合理的服务拆分和通信机制,你可以将Golang和Python有效地结合在一个项目中,共同实现复杂的功能。

回到顶部