zoukankan      html  css  js  c++  java
  • 网络协议

    在做客户端与服务器通信之前,先约定消息包的格式,例如:整个包的长度+消息类型+消息体数据内容

    为什么发送的每条消息数据前面要加个长度的字段?
    TCP的协议中,包的接收顺序就是包发送时候的顺序, 你收到的时候先将长度这个字段解析出来,然后读入接下来的data内容,
    粘包:如果data内容过长(大于这个包的长度),那可能是几个包粘在一块儿了,只读入当前包的内容。
    断包:如果不足(小于这个包的长度),证明出现断包的情况,缓存下来,等下次收到包的时候,肯定显示上次收到包的内容了,拼在一块儿解出来。

    那么就得把消息包转化成byte[],然后发出给服务器。服务器接收,然后解析。注意字节序(大端,小端)的问题

    你可以自定义结构体,然后里面每个类型都去转成字节数组。那太蛋疼,直接抛弃~!

    Json,自然是可以的,只是数据量大,浪费带宽。弱联网完全可以用的,强交互的自然不用咯。
    自动化的工具的话,可以看我的另一篇文章:Excel转Json,Json转CSharp
    unity客户端用LitJson,支持多层嵌套,之前IOS会报JIT错,现在好像不会了。
    LitJson可以直接把一个类的对象转成json字符串,然后我们再把字符串转成字节数组,发出去。
    接受的话,把字节数组先转成json字符串,然后再转为一个类对象。
    Java服务器的话,可以用Alibaba的FastJson。

    protobuf(google)传送门:https://github.com/google/protobuf
    优点就是:一份消息协议.proto文件,然后用工具自动化生成多平台的消息结构,减少了重复大量工作量和人为出错。
    unity客户端的话,因为官方没有提供.net版本,所以用protobuf-net(第三方)传送门:https://github.com/mgravell/protobuf-net

    关于protobuf_lua_gen,pbc,sproto
    请参考:http://bbs.ulua.org/article/ngui/simpleframework_base4.html
    或者直接去云风的blog找去

  • 相关阅读:
    跨域的几种方式
    jQuery滚动条回到顶部或指定位置
    获取屏幕高度、宽度
    js判断手机系统和微信
    js获取url中的参数
    css3内容溢出属性
    css盒模型
    [转]swagger2 入门教程
    [转]cron表达式的用法
    [转]React入门看这篇就够了
  • 原文地址:https://www.cnblogs.com/joeshifu/p/5488830.html
Copyright © 2011-2022 走看看