从python服务器解码javascript协议缓冲区数据失败

2024-10-01 00:14:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用javascript作为客户端,python作为服务器。在

我需要在它们之间使用协议缓冲区发送/接收。在

我的原型看起来像这样:

message CMsgBase
{
    required CMsgHead msghead           = 1;
    optional bytes msgbody              = 2;
}

message CMsgHead
{
    required int32 msgtype                = 1;
    required int32 msgcode                = 2;
}

我正在使用协议.js在javascript中,使用XMLHttpRequest和POST方法将数据发送到服务器:

^{pr2}$

服务器端可以接收此消息并成功解码:

BaseHTTPServer

def do_POST(self):
    pbMessage = self.rfile.read(length) 
    # ...

问题是我无法解码javascript端从服务器端接收的数据。在

以下是我如何从服务器将数据发送到客户端:

pbMessageReturn = CMsgBase()
# ......
self.send_response(200)
self.end_headers()

"""Serializes the protocol message to a binary string.

Returns:
  A binary string representation of the message if all of the required
  fields in the message are set (i.e. the message is initialized).
"""

self.wfile.write(pbMessageReturn.SerializeToString())

下面是服务器端打印(pbMessageReturn)的结果:

msghead {
  msgtype: 10006
  msgcode: 1
}
msgbody: "\n\014192.168.1.16"

一切似乎都很好。在

下面是我如何用javascript解码来自服务器的消息:

xhr.onreadystatechange = function() {
    if (xhr.readyState == 4) {
        var result = xhr.responseText;
        var recvMessage = CMsgBase.decode(result, "utf8");
    }
};

我有个错误:

protobuf.js:2335 Uncaught Error: Missing at least one required field for Message .CMsgBase: msghead(…)

顺便说一句,如果我试图在不序列化数据的情况下发回数据:

self.wfile.write(pbMessageReturn)

我在javascript中得到的响应是:

console.log(xhr.responseText);

msghead {
  msgtype: 10006
  msgcode: 1
}
msgbody: "\n\014192.168.1.16"

我真的不确定错误是在服务器端还是在客户端。在

如有任何建议,我们将不胜感激,谢谢:)


Tags: the数据self服务器客户端message服务器端required