Golang Go语言写对话协议有没有格式、方式、套路之类的?

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

比如哈,用 tcp 写个 a/b 双方自定义的对话, a:你好我是 a ,我 xxx,我公钥是 b:收到,根据你的公钥,我的公钥是 a:根据你的公钥,收到 ... 有些对话会好几个回合,定义一个对话写一个 func ,会比较乱,而且对话类多了也不好改。 小白请问大佬们通常是如何解决这类问题的?是否有一些名词 术语 或者建议之类的我去查查。大概是这么个意思,也不知道问的对不对,铁子们别喷哈


Golang Go语言写对话协议有没有格式、方式、套路之类的?
16 回复

TLV ?

更多关于Golang Go语言写对话协议有没有格式、方式、套路之类的?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


直接 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 这种序列号

相当于自己新写一个协议?直接参考 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语言写对话协议需要遵循一定的格式、方式和套路,通过合理的定义和实现,可以实现高效、可靠的数据通信。

回到顶部