写的这个软件不是web,前端用的是QT写的,后端打算是用go来写,前端和后端通信使用的是TCP协议。 现在遇到的问题:
如下,要怎样才可以实现后端收到前端数据包后发现有字符串"ExecLogin",就能调用到func (this *LoginClass) ExecLogin(str string) 来执行操作呢?不止登陆,前端肯定还有各种各样的功能,要怎样才能弄成通用的方式,就是后端收到数据包能根据数据包中的字符串名来调用相应的执行函数。不知道泛型能不能实现
// login登陆类
type LoginClass struct{}
// 执行登陆操作
func (this *LoginClass) ExecLogin(str string) {
.....
}
有疑问加站长微信联系(非本文作者)

建一个
map[string]func(data []byte)
映射函数名称和函数。提前add到map中。
运行时函数名称应该只有反射能拿到吧。
建议使用http协议,一个是因为有很多http协议的框架开发很方便,另一个是tcp有粘包的风险。
你需要用反射。
3楼 @shoyer2010 附意
看来还是得用map的那种方式了,http考虑过,但不合适当下自己写的项目,也就没用了。
反射的方式考虑过,还是在想有没有更好的方式
map方式会比反射好点
题主之前写java的吧,可以用反射实现,写的通用一点,增加新接口,这里基本不用怎么改动
先将协议(数据格式,包括调用方法,参数以及返回值)定义好,然后编码为GOB,通过TCP传输;
接收到数据后GOB解码,然后根据解码后的数据进行业务方法调用
这个不就是gRPC的使用流程嘛
题主之前没写过java,学编程纯爱好。现在就想写点东西出来而已。其实之前也考虑过反射,但是看了很多文章说反射会影响性能,心里就有点咯噔了……有点……选择困难症的感觉……
现在写的软件差不多就是这样,不过因为前端使用的是QT所以,不知道QT怎么对编码的GOB进行解码……
有点偏向这种方式……又担心以后添加新功能时,不知道会不会有什么隐藏问题……可能最终会使用这样的方式吧
要做成通用的,还是要用反射
11楼 @yz23je gRPC默认编码格式就是GOB
我找到一篇文章,关于gRPC的QT实现[https://blog.csdn.net/Fallinlove520/article/details/121989585],参考一下
我觉得你这个需求RPC的方式很适合,出了业务远程调用外,登陆、鉴权等安全方面也需要考虑进去
谢谢,我看看
这不就是rpc吗,直接上rpc吧