V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
raw0xff
V2EX  ›  Go 编程语言

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

  •  
  •   raw0xff · 2023-07-01 21:13:30 +08:00 · 1803 次点击
    这是一个创建于 530 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    15 条回复    2023-07-03 11:25:04 +08:00
    6IbA2bj5ip3tK49j
        1
    6IbA2bj5ip3tK49j  
       2023-07-01 21:15:51 +08:00 via iPhone
    TLV ?
    Nazz
        2
    Nazz  
       2023-07-01 21:25:29 +08:00 via Android
    直接 websocket
    raw0xff
        3
    raw0xff  
    OP
       2023-07-01 21:30:12 +08:00
    @xgfan 大佬说的是结构吧?我用的 JSON

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

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

    如果是如何处理连续消息, 定义 seq id 这种序列号
    dayeye2006199
        14
    dayeye2006199  
       2023-07-03 01:20:05 +08:00
    状态机+1
    yuan1028
        15
    yuan1028  
       2023-07-03 11:25:04 +08:00
    相当于自己新写一个协议?直接参考 HTTP 就完事了哈哈哈
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2214 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 16:02 · PVG 00:02 · LAX 08:02 · JFK 11:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.