场景:客户端有个文件存放用户数据,想将它压缩后发送到服务端保存,然后其他客户端通过向服务端请求获取文件数据替换本地文件。实现用户数据同步。
服务端代码:(很简单的拿到数据就输出)
<?php
$txt = $_POST['data'];
echo $txt;
?>
客户端代码:
string url = "http://localhost:8080/am_sync_data.php";
string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "abc.txt");
string path1 = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "abc1.txt");
var data = File.ReadAllBytes(path);
//var txt = File.ReadAllText(path);
// 采用.NET提供的GZipStream压缩
var comData = GZipUtils.Compress(data);
using (WebClient client = new WebClient())
{
// 构造传输参数,压缩数据转换未Base64字符串
var value = Convert.ToBase64String(comData);
var param = string.Format("data={0}", value);
client.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
var resStr = client.UploadString(url, param);
// Base64字符串转换回压缩数据
var resData = Convert.FromBase64String(resStr);
File.WriteAllBytes(path1, resData);
}
出现的问题:
1. 使用文本对比工具对比了原始文件和保存后的文件,发现存在差异。(大小相同)
2. 将byte[]数据转换为字符串输出到文件进行对比,发现大部分字节是相同的,少量出现不对,怀疑是特殊字符到服务端后被识别错了。
3. 如果不经过压缩直接传输是没问题的,但是数据量就大了很多,实不可取。
请教的问题:
1. 是C#的问题还是PHP的问题,或者代码如何改进?(只要能实现场景描述即可)
2. 关于场景描述中提到的同一用户多客户端间的数据同步应该是很常见的,想了解下有没有优秀的方案可参考下?