### 1. 关于数据的传送规范 通用的数据传输规范 ```json { 'tag': 'tag', 'msg': 'message', 'opt': True, 'arg':{ 'arg1': value1, 'arg2': value2, ...... } } ``` > 解释:
> 1. tag里一般存放的是操作标签或者房间名(这个可以自定义)。
> 2. msg里存放的是消息,也可以是某个命令的主要参数,例如在加入房间的指令中,msg存放的是房间id。
> 3. opt是一个Boolean类型的值,用来标识这个信息是否为指令,即用于操作WS服务器进行某些操作(例如加入房间,删除房间等等)。
> 4. arg是一个obj,包括了这个命令的附加参数,在非命令的信息里最好还是不要存在arg,**后续可以考虑加入可以自定义的数据域,可以传输一些附加参数到服务器。**
### Step1. 加入Room之间的数据交换 在客户端申请加入一个room时候,会向服务器发送一个这样子的请求: ```JSON { "tag": "setRoom", "msg": Roomid, "opt": true, "arg": {} } ``` > 其中的arg字段可以不写,因为实际上服务器并不会调用这个arg。当然,为了遵守规范,在底层实际编写的时候还是会保留一个空对象结构arg。 服务端在接收到这个请求之后就先回去判断用户是否已经加入某个房间,由于设计上并不考虑一客户端加入到多个房间的情况,所以成功加入的话就会自动从原来房间退出。如果原来从未加入过房间,则对应客户端的对象内不会包含roomid元素即它的值是`undefined`。如果检测到未加入过房间,则直接将client请求的roomid直接赋值进去。如果原来已经加入过room,即room不为`undefined`则新值会替换原来的值,并在后端给予一定的提示(未来也许会加入多房间功能或者进退房间提示等等...,现在属于是预留了最基本的条件了)。 如果服务器已经完成了工作,就会给予客户端一个回应,回应体结构如下: ```JSON { "msg": "Join room success!", "opt": false, "tag": "reply", "arg":{ "topic": "JoinRoom", "reasonCode": 200 } } ``` 这个结构是固定的,所以client直接用识别内容即可。 > reasonCode目前还未定义其含义。