110,538
社区成员
发帖
与我相关
我的任务
分享
嗯,或者用最近几年时髦的 async/task 语法,就是设计为这样的原型,也就是对于你自定义的任何业务类型实体,调用通用的通讯代码。如果你还在仅仅能够纠结某个业务类型的数据传输格式而不能考虑通用,那么我建议你换个方式、换个渠道,学习通讯程序设计。public static async Task<R> SendMessage<T, R>(T message)
public static async Task<R> SendMessage<T, R>(T message)
这样的原型,也就是对于你自定义的任何业务类型实体,调用通用的通讯代码。如果你还在仅仅能够纠结某个业务类型的数据传输格式而不能考虑通用,那么我建议你换个方式、换个渠道,学习通讯程序设计。void Send<T>(T object)
这样的方法来实现发送操作,或者以void Send<T,R>(T sendMessage, Action<R> callback, Action<Exception> error = null)
这样的原型来实现发送和(异步接收到返回消息之后的)解析返回对象并回调功能。
编写通讯代码,都是针对各种业务对象的一个通用代码。那种还以为针对每一种业务类型分别写一大堆什么格式的代码的代码,也就是玩儿最早期的 c 教学程序时才用的设计模式吧。[quote=引用 18 楼 xuzuning 的回复:]
所以在你的几个帖子的回复中,不都一再强调需要有协议吗?
所谓协议,就是双方的一种约定,并不是件很难的事情。就算你写个函数,不都要约定好什么参数名表示什么意思的吗?
比如发送一段文字,你不是也得告诉对方,这段文字是 gbk 字符集的,还是 utf-8 字符集的吗?如果你和对方约定好:都使用 utf-8 字符集(这也是协议),双方都得遵守吗?不然如何去解释那一堆乱码呢
[quote=引用 18 楼 xuzuning 的回复:]
所以在你的几个帖子的回复中,不都一再强调需要有协议吗?
所谓协议,就是双方的一种约定,并不是件很难的事情。就算你写个函数,不都要约定好什么参数名表示什么意思的吗?
比如发送一段文字,你不是也得告诉对方,这段文字是 gbk 字符集的,还是 utf-8 字符集的吗?如果你和对方约定好:都使用 utf-8 字符集(这也是协议),双方都得遵守吗?不然如何去解释那一堆乱码呢
其实在复杂的复合数据结构拆开来也是由基本数据构成的。那其实按照传输byte数组的理论,怎么封装其实就是码代码的事情而已了。通用方法其实我也想过,但是要支持多平台的话。很多技术不能通用。byte数组虽然会码一些格式代码,但还是比较好用的 那么除了“一个int、一个short、一个byte”这些最简单的对象以外,是否有能力写一个通用的传输其它成千上万中自定对象的通用方法呢?
那么除了“一个int、一个short、一个byte”这些最简单的对象以外,是否有能力写一个通用的传输其它成千上万中自定对象的通用方法呢?
所以在你的几个帖子的回复中,不都一再强调需要有协议吗?
所谓协议,就是双方的一种约定,并不是件很难的事情。就算你写个函数,不都要约定好什么参数名表示什么意思的吗?
比如发送一段文字,你不是也得告诉对方,这段文字是 gbk 字符集的,还是 utf-8 字符集的吗?如果你和对方约定好:都使用 utf-8 字符集(这也是协议),双方都得遵守吗?不然如何去解释那一堆乱码呢
[quote=引用 7 楼 娃都会打酱油了 的回复:]
我就在前几天回答过类似的
socket字节流
前几位byte用于定义本次数据总长
然后每段再定义是一个byte用于区分数据是文字还是图片,第二~X个byte用于定义内容占用byte长度,再后面就是实际的内容
那还是那个问题,如果发送的内容是多种如文本视频图片,那么不定义头什么的作为区分如何将这信息顺利接收呢?
public class MyABCModel
{
public string T1;
public string Img1Base64;
public string T2;
public string Img2Base64;
}
的数据结构,然后使用你通用的——只需要几行代码的——json 序列化、反序列化以及传输”一行普通字符串“的最简单的通讯方式,可以重复使用一万次。通用程序!
而不需要你为各种各样的 class 去分别设计什么”头、尾、长度“之类的规则以及分别写一大堆解析代码。对于一般的信令传输,大致只要是传送一个字符串,并且用换行(或者回车换行)结束就可以了。因为类似这类序列化方法,得到的也就是一个规范的字符串,其中并不包含换行和回车符号。所以一般的通用的信令传输,只要将每一个字符串作为一个消息(并且消息内容中不可能含有换行和回车),消息以换行或者回车为结束,消息格式为 json 格式,就可以了。无需去定义什么各种信令的”头、尾、长度、属性次序“等等一大堆东西。JObject.FromObject(obj).ToString()