以前一直做PHP,只处理HTTP超文本数据,后来转底层开发语言,对于TCP数据的传输不太理解,比如iOS客户端发送了数据包,到了Go的服务端,却可以解出数据类型来判断使用哪种方法进行处理,这里面是如何实现的?
传输给Go服务的数据是Payload字节码,没有文本内容定义,但最后却可以解出结构类名。
switch msg.(type) {
case *mtproto.RawMessageData:
rawMsg, _ := msg.(*mtproto.RawMessageData)
default:
err = fmt.Errorf("invalid msg, msg: %#v", msg)
}
iOS传递来的数据是这样的
Payload:[8 213 170 149 157 249 255 255 255 255 1 18 12 24 9 40 161 138 220 222 223 252 255 207 77] Attachment:[33 5 215 251 229 255 159 77 201 104 109 152 83 157 46 255 16 95 208 199 116 229 234 133 241 60 194 6 190 182 153 206 65 228 89 231 82 207 219 56 135 30 105 51 138 193 122 183 235 227 16 58 100 240 243 185 201 124 148 123 38 125 142 35 57 69 208 250 79 191 148 169 122 104 185 123 151 24 116 235 118 4 174 159 50 110 106 131 215 162 173 44 123 174 91 184 1 233 114 168 167 1 182 182 217 28 235 220 149 144 131 164 54 79 67 77 145 220 193 73 243 105 215 119 76 106 190 142 254 50 11 139 186 238 61 182 255 132 228 163 134 227 177 165 7 159 206 110 14 212 0 177 117 233 161 245 252 62 161 119 149 43 130 199 148 137 183 143]} payload=[8 213 170 149 157 249 255 255 255 255 1 18 12 24 9 40 161 138 220 222 223 252 255 207 77]
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…