Golang Go语言写对话协议有没有格式、方式、套路之类的?
比如哈,用 tcp 写个 a/b 双方自定义的对话, a:你好我是 a ,我 xxx,我公钥是 b:收到,根据你的公钥,我的公钥是 a:根据你的公钥,收到 ... 有些对话会好几个回合,定义一个对话写一个 func ,会比较乱,而且对话类多了也不好改。 小白请问大佬们通常是如何解决这类问题的?是否有一些名词 术语 或者建议之类的我去查查。大概是这么个意思,也不知道问的对不对,铁子们别喷哈
Golang Go语言写对话协议有没有格式、方式、套路之类的?
直接 websocket
大佬说的是结构吧?我用的 JSON
在用 ws ,tcp 只是举个例子。
可能是我没形容清楚,就是这样一来一回的对话有没有比较特别的写法?不像我这么笨每一种对话写个函数。
看看标准库 tls 是怎么交换密钥的
感谢大佬,大概看了下好像也是 if return 套的,我一直以为 if 一层层套下去会比较初级,想看看有没有进阶的写法。
状态机
自带 ecdh ,直接拿来用就是了。
不确定我有没有理解正确,不过在有协程的语言上挺直观的吧,应该只需要一个 func ?
send message 1
recv
assert message 1 from b
send messge 2
recv
assert message 2 from b
一直这样下去
ws 的 onmessage 这种形式的话最多也就改成基于 counter 的 switch case ?每次收到一条消息就 count+1
异步的就是用状态控制握手进程;
同步就是 send,recv,send,recv…
定义一个消息格式,其中有一个类型字段,不同类型消息分别处理。
任何语言都能用状态机。。
感谢,我去查查。
每次 onmessage 的时候都是处理当前的一条消息,不同用户不同 api 就没法儿用 count+1 了吧
哪里能找到的典型的写法例子?
你问的啥, 没看懂.
如果是如何处理连续消息, 定义 seq id 这种序列号
状态机+1
相当于自己新写一个协议?直接参考 HTTP 就完事了哈哈哈
在Go语言中写对话协议,确实存在一定的格式、方式和套路。以下是一些关键点和建议:
格式
- TLV(Tag-Length-Value)格式:这是一种常见的自定义协议格式,通过标签(Tag)标识数据类型,长度(Length)指明数据大小,值(Value)承载实际数据。Go语言中可以通过定义结构体和编解码函数来实现TLV协议。
方式
- 使用标准库:Go语言的标准库提供了丰富的网络编程功能,如
net
包支持TCP、UDP等协议的通信,net/http
包支持HTTP协议的通信。 - 第三方库:对于特定的协议,如MQTT,可以使用第三方库来实现。例如,Eclipse Paho MQTT库可以帮助Go语言实现MQTT协议的点对点消息发送。
套路
- 定义协议:首先明确协议的具体格式和内容,包括标签、长度和值的定义。
- 实现编解码:根据协议格式,实现数据的编码和解码函数。
- 网络通信:使用Go语言的网络编程功能,实现客户端和服务器之间的通信。
- 错误处理:在网络通信和协议处理过程中,加入适当的错误处理逻辑,确保程序的健壮性。
综上所述,Go语言写对话协议需要遵循一定的格式、方式和套路,通过合理的定义和实现,可以实现高效、可靠的数据通信。