golang 写对话协议有没有格式?方式?套路之类的?

2023-07-01 21:13:30 +08:00
 raw0xff

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

1841 次点击
所在节点    Go 编程语言
15 条回复
6IbA2bj5ip3tK49j
2023-07-01 21:15:51 +08:00
TLV ?
Nazz
2023-07-01 21:25:29 +08:00
直接 websocket
raw0xff
2023-07-01 21:30:12 +08:00
@xgfan 大佬说的是结构吧?我用的 JSON

@Nazz 在用 ws ,tcp 只是举个例子。

可能是我没形容清楚,就是这样一来一回的对话有没有比较特别的写法?不像我这么笨每一种对话写个函数。
Nazz
2023-07-01 22:02:37 +08:00
看看标准库 tls 是怎么交换密钥的
raw0xff
2023-07-01 22:29:03 +08:00
@Nazz 感谢大佬,大概看了下好像也是 if return 套的,我一直以为 if 一层层套下去会比较初级,想看看有没有进阶的写法。
oott123
2023-07-01 23:03:08 +08:00
状态机
DefoliationM
2023-07-02 02:30:57 +08:00
自带 ecdh ,直接拿来用就是了。
nifury
2023-07-02 10:21:49 +08:00
不确定我有没有理解正确,不过在有协程的语言上挺直观的吧,应该只需要一个 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
iceheart
2023-07-02 11:02:47 +08:00
异步的就是用状态控制握手进程;
同步就是 send,recv,send,recv...
chenjia404
2023-07-02 15:25:44 +08:00
定义一个消息格式,其中有一个类型字段,不同类型消息分别处理。
flyqie
2023-07-02 17:18:08 +08:00
任何语言都能用状态机。。
raw0xff
2023-07-02 18:58:56 +08:00
@oott123 @DefoliationM 感谢,我去查查。
@nifury 每次 onmessage 的时候都是处理当前的一条消息,不同用户不同 api 就没法儿用 count+1 了吧
@iceheart 哪里能找到的典型的写法例子?
hzzhzzdogee
2023-07-02 20:52:41 +08:00
你问的啥, 没看懂.

如果是如何处理连续消息, 定义 seq id 这种序列号
dayeye2006199
2023-07-03 01:20:05 +08:00
状态机+1
yuan1028
2023-07-03 11:25:04 +08:00
相当于自己新写一个协议?直接参考 HTTP 就完事了哈哈哈

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/953317

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX