• 撸个服务端出来系列(一)


    作为一个干了快一年半的客户端。有时候我总是在想游戏的服务端是怎么实现的呢~或者说我要如何撸出一个服务端来呢?

    由于之前有做web的经验和大学时写过一个聊天室程序。我想大不了是个实现在tcp上的长连接嘛。

    嗯!首先我要实现两端通信(这不是废话嘛)。

    我列了下初期要做的工作大致是

    1.技术的选型。由于我最熟悉的客户端是cocos2dx,最熟悉的服务端语言是java。ok那拍了下脑袋就用这两个吧。

    2.定制一个交互协议。根据我写客户端的经验。一般搞安卓和ios的服务端的人都喜欢丢个xml或者json给你解析。为嘛?简单呗。不过由于我写的是游戏,而且是跨语言的通信xml和json似乎都是还不错的选择。但毕竟咱们这个是带有实践性的技术研究。所以我设计了如下的报文格式。

    int 协议号 short 消息体长度 byte[] google buffer

    为啥我采用了google buffer呢。实际上我是为了偷懒。你要知道如果我每个协议都定义了一个具体的消息体结构。那我就要把它翻译成两种语言。无疑在效率上是很傻逼的一件事,而且根据我的实际开发经验,往往协议翻译出错,导致的问题要么很容易排查,要么很难找到问题。而且google buffer的原理和压缩。可以使得在性能上不是特别下降的情况下,能够压缩我的协议。有兴趣的同学可以学习下google buffer

    这里提供一篇IBM原理性的文章

    http://www.ibm.com/developerworks/cn/linux/l-cn-gpb/

    3.跨平台通信的问题解决。有人会问。你不是用google buffer了麽。不过你要知道我的协议号和消息长度两个可不是google buffer。这里我们需要解决1).大小端通信的问题.2)粘包和丢包的处理。这部分可以去参考网上许多的博客。还有Netty的教程(其实我一开始是用mina的。至于为啥不用java socket和nio 因为我一开始写的聊天室,每次都要启动一个线程维护一个session,原来还有多路复用的技术~ ~,至于nio因为即使给我直接用nio我也不一定能很方便的写出东西,在探究东西上和干活效率上总有个平衡点嘛)。

    https://github.com/waylau/netty-4-user-guide


  • 相关阅读:
    Candy leetcode java
    Trapping Rain Water leetcode java
    Best Time to Buy and Sell Stock III leetcode java
    Best Time to Buy and Sell Stock II leetcode java
    Best Time to Buy and Sell Stock leetcode java
    Maximum Subarray leetcode java
    Word Break II leetcode java
    Word Break leetcode java
    Anagrams leetcode java
    Clone Graph leetcode java(DFS and BFS 基础)
  • 原文地址:https://www.cnblogs.com/leejuen/p/5547437.html
Copyright © 2020-2023  润新知