mars 自定义长连接协议头步骤

uyhoqukh  于 2个月前  发布在  其他
关注(0)|答案(7)|浏览(51)

我找文档的时候说,可以修改longlink_packer.cc 文件来自定义协议头,但是我还是无法快速使用。

  1. 如何修改
  2. 修改了longlink_packer.cc 文件后,是否需要重新编译(小白嘛)
  3. 如何在项目中使用
mwngjboj

mwngjboj1#

自定义后直接使用 python build_android.py进行编译即可

vawmfj5a

vawmfj5a2#

发现自定义协议也不必要,可以使用把协议定义成默认的样子。但是疑问又出来了

struct __STNetMsgXpHeader {
    uint32_t    head_length;
    uint32_t    client_version;
    uint32_t    cmdid;
    uint32_t    seq;
    uint32_t	body_length;
};

seq 是起什么作用呢?cmdid 只有一级命令,如果要做二级分类怎么弄呢?

看到下面一句话,不知道是否能确定seq 的作用
mars长连的请求包和回包的对应关系的条件是seq一样,所以服务器对请求的回应要保证seq一样

v64noz0r

v64noz0r3#

你好,看到过你的几个回复,想问下两个问题,
自定义后直接使用 python build_android.py进行编译即可
这里会出现无法调用makesureAuth 的问题,我看c+的是有string参数的,但是java是无参方法

2、sample的代码,服务起来后会直接连接到服务器,同时发送心跳,然后我发送一个消息
服务器会不处理,原样返回心跳,消息
但是消息不会在onPush中出现,且服务器说客户端马上把socket关闭了。

不知道这里的流程要怎么样才行?

epggiuax

epggiuax4#

发现自定义协议也不必要,可以使用把协议定义成默认的样子。但是疑问又出来了

struct __STNetMsgXpHeader {
    uint32_t    head_length;
    uint32_t    client_version;
    uint32_t    cmdid;
    uint32_t    seq;
    uint32_t	body_length;
};

seq 是起什么作用呢?cmdid 只有一级命令,如果要做二级分类怎么弄呢?

看到下面一句话,不知道是否能确定seq 的作用
mars长连的请求包和回包的对应关系的条件是seq一样,所以服务器对请求的回应要保证seq一样

mars长连的请求包和回包的对应关系的条件是seq一样,所以服务器对请求的回应要保证seq一样. 是这个作用。

cmdid 就能做分类了,类似 url, 什么场景中需要有二级分类?

mzillmmw

mzillmmw5#

你好,看到过你的几个回复,想问下两个问题,
自定义后直接使用 python build_android.py进行编译即可
这里会出现无法调用makesureAuth 的问题,我看c+的是有string参数的,但是java是无参方法

2、sample的代码,服务起来后会直接连接到服务器,同时发送心跳,然后我发送一个消息
服务器会不处理,原样返回心跳,消息
但是消息不会在onPush中出现,且服务器说客户端马上把socket关闭了。

不知道这里的流程要怎么样才行?

  1. 这里会出现无法调用makesureAuth 的问题,我看c+的是有string参数的,但是java是无参方法
    答: 你先暂时手动修改 java 代码和 C++对应起来,可以忽略那个参数,我找时间也修改下
  2. sample的代码,服务起来后会直接连接到服务器,同时发送心跳,然后我发送一个消息
    服务器会不处理,原样返回心跳,消息
    但是消息不会在onPush中出现,且服务器说客户端马上把socket关闭了。

答: 服务器也要回复心跳。 而且请求消息必须直接回复,不能丢到 push 中,不然客户端确实会关闭 socket 的

bkkx9g8r

bkkx9g8r6#

好的,谢谢回复
c++这个我会尝试改一下

gstyhher

gstyhher7#

@garryyan 因为未来好区分,我一开始就使用了二级分类。

例如:

enum ServiceId {
    //系统服务,心跳之类的
    SYSTEM = 0;
    //用户服务
    USER = 1;
    //聊天
    CHAT = 2;
}
//命令Id是二级,但是又独立出来,所以命名 = ServiceId_CommentId
enum CommandId {
    USER_LOGIN_REQ = 0;
    USER_LOGIN_RESP = 1;
}

使用了short + short = int 解决了这个问题。

相关问题