以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  客户端OpenQQ发送长string,服务器偶尔会收不到。这个有办法妥协解决吗?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=98395)

--  作者:chen3728060
--  发布时间:2017/3/29 9:40:00
--  客户端OpenQQ发送长string,服务器偶尔会收不到。这个有办法妥协解决吗?

我是卖便利店收银软件的,想给我的第三方收银软件,做一个手机查账的功能。我在阿里云上做了一个OpenQQ的服务器端,顾客的本地电脑装了一个客户端。

 

①老板通过手机向HttpRequest发送查询请求

②然后服务器端会通过OpenQQ向客户端发送一条查询指令,例如“库存数量|查第一页|每页50条”。

③然后客户端ReceiveMessage事件收到了,就SQL查询本地的erp软件的库存数量,提取出来生成临时表。然后遍历临时表的行,把表变成一条string,例如"苹果,5|雪梨,6|香蕉,7”。客户端把这条string 发送给服务器端

④服务器端ReceiveMessage事件收到了,把和这个string转为一个表的样子

⑤HttpRequest里,用CreateFromDataTable的方法生成网页给回老板

 

现在有个问题OpenQQ之间传输的string,如果太长,会容易出现收不到的情况。经过我多次测试,发现这样的事情。

 

①服务器端发客户端,99%是没问题。因为指令很短,就是“库存数量|查第一页|每页50条”

②客户端发服务器端,如果表里的行少于15行,转生成的string不会太长,传回去服务器端99%能收到

 


图片点击可在新窗口打开查看此主题相关图片如下:qq截图20170329092314.png
图片点击可在新窗口打开查看

 

③客户端发服务器端,如果表里的行超过15,或者生成的string比较长,客户端发送后,服务器端很容易收不到但是!我把客户端只有50k上传速度的联通网线拔了,换成上传有500k的电信光纤网线,或者是移动4G热点,就又可以稳定收到。
 


图片点击可在新窗口打开查看此主题相关图片如下:qq图片20170329092502.png
图片点击可在新窗口打开查看

 

④开发的时候,服务器端和客户端都在同一个电脑里时,无论怎么发,多少行提取,string多长,都是100%的收发。

 

是不是string太长会容易丢失?但是我开发的其他软件,经常客户端一次过保存5000多新行的表(数据库在阿里云服务器),也能保存成功,没有行的丢失。这条string,好像也就400个字符,没几个KB,怎么会传输失败?

 

------------------

 

或者我想实现的这个移动端查询第三方收银软件数据,还有其他思路解决吗?

 

我有想过直接装服务器端在客户电脑,移动查询直接就在客户电脑的HttpRequest上生成。但是有个很大的问题,客户都是自己的小网线,什么移动 铁通 电信都有,没有固定公网ip,跟给他搞动态域名还要搞路由器端口映射,每个客户这样搞,我太痛苦了。而且客户电脑又不注意防毒,偶尔就中个病毒又要重新搞。

[此贴子已经被作者于2017/3/29 9:43:56编辑过]

--  作者:chen3728060
--  发布时间:2017/3/29 10:28:00
--  

顶一下先~


--  作者:有点色
--  发布时间:2017/3/29 10:37:00
--  

 为什么数据不直接存放在服务器上,而是分别存放在各个客户端?

 

 如果你服务器给各个客户端发送请求,而客户端有可能网络故障而无法响应请求。

 

 如果你确定是要那样做的,而长字符串不行,那就发文件吧。


--  作者:wei0769
--  发布时间:2017/3/29 10:42:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:4.png
图片点击可在新窗口打开查看

--  作者:chen3728060
--  发布时间:2017/3/29 11:10:00
--  回复:(wei0769)[upload=png,4.png]UploadFile/2017...

服务器端,向客户端发指令,只有OpenQQ这个玩意啊,没有其他方法啦


--  作者:chen3728060
--  发布时间:2017/3/29 11:13:00
--  回复:(有点色) 为什么数据不直接存放在服务器...
我本来有想过把客户端的数据查询好,然后全部回写到服务器的数据库里。不过这样就需要客户端经常同步咯,服务器端的数据库压力就大咯。我以前用C#写了一个这样架构的。现在我用狐表,就想用服务器端最轻压力的,不存数据,每次就向客户端要,把压力堆给客户端。 你觉得那种架构好?
--  作者:chen3728060
--  发布时间:2017/3/29 11:14:00
--  回复:(有点色) 为什么数据不直接存放在服务器...
我是卖收银软件的嘛,就是很多客户,用这些收银软件,那些库存数据本身就是在客户自己的sql2000数据库里,不是在我们服务器里。
--  作者:有点色
--  发布时间:2017/3/29 11:20:00
--  

 就按照你原本的思路来做吧。发长字符,改成发文本文件或者数据库不就好了?要接受偶尔接收不到数据情况,这种传输方式毕竟不是完全可靠的,网络原因会导致这种情况。