PB inet组件 Post给php时怎么接收

PHP/Apache/Nginx Powerbuilder

最近接触了pb的inet组件调用和提交java写的接口。对于单条数据可以说非常好,取和发送都很成功,没有什么问题。

但是如果要获取多达千条的记录甚至数万条,用json不合适。

改进:写出特殊的多种需求的接口,如果只需要返回较少栏位时,写专门的接口,减少不必要的栏位。第二:约定栏位名的简称,这样能缩小栏位名放入json中的占用长度。甚至我想用栏位的序号作为json编码中的栏位名即可。

因为表的栏位非常多,而且栏位名定义非常复杂(非常长),组合成json后非常不适合传输数据。多年经验所得,如果为了传输多行数据,还是按”|”分隔每个栏位,并约定栏位的顺序。这样最靠谱。只是厂家有时一推六二五。无果罢了。

另外pb效率低,对于返回非常多条记录的json记录的解析实在无能为力,虽然我用了栏位名预测方法试图更快跳过栏位名部分,但是实际效率非常低,如果真要用我想得用c来实现,才有天然的速度可言。我现在只用上传接口(一条),要取很多数据时我已经彻底否定了客户当初要求只使用接口的做法,改用dump另外建立一个镜像服务器来读。

对于不以单条数据交互为目的的调用,厂家还是建议用mysql dump取数据或者开账号直接查询mysql(只是要求不要太频繁,注意时机,而且不读当天的分表)因为dump要锁表,时机不对影响正常业务,读当天分表非常影响讲究效率的详单计费数据的高并发写入。所以实际情况总是要权衡左右,时间点,频率,尽量少获取返回值都要考虑进去。

后面接触到要和php打交道,用post时,无法从$_POST数组接收到数据。原因是因为需要post时需要指定:PHP默认识别的数据类型是application/x-www.form-urlencoded标准的数据类型。inet我不知道是否能指定,反正后面是改用: $GLOBALS[‘HTTP_RAW_POST_DATA’] 来接收并自己切分参数(类似:parm1=aaa&parm2=bbb)。第一次遇到这个问题时,是我自己baidu了解到的,因为一般的php程序员都是很简单从$_POST去接收即可,根本没想到,又是打印日志,又是抓包,忙了好几天才解决。

之前调用java的json接口时不会出现问题,是因为对于text/html,soap,json格式都是使用$GLOBALS[‘HTTP_RAW_POST_DATA’]来直接接收处理的。

另外还遇到一个奇葩问题,php给出的post之后的结果字符串,含有几千个空白不可见字符在前面,最后给出的才是返回结果,把人搞惨了。messagebox出来才发现。当然这是php做接口时引发的问题。可以直接用浏览器中看源码,一定要使得返回字符串就在第一行。前面不要出现任何空白行。