客户端和服务端交互的问题

Sqsdhc 2018-05-05 10:47:12
我目前开发了一个企业的软件是直接连接数据库的,现在想改成通过客户端发送请求给服务端。服务端去数据库查询结果返回给客户端,这里有个问题就是当客户端发送请求。服务端是不是要判断一下这个是什么请求。然后执行对应的任务再返回结果。因为我没有做过这种,所以想知道如果当我业务量大的时候就if else if else if 这样子每次有客户端的请求都不停的判断程序的执行效率会很低吗。你们都是怎么写的。本人菜鸟求教
...全文
852 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sqsdhc 2018-05-11
  • 打赏
  • 举报
回复
谢谢大家的回答。看了之后发现自己很多知识点还不了解。我也会加快学习的
兵工厂三剑客 2018-05-09
  • 打赏
  • 举报
回复
根据你的 这个需求,需要在服务端架个服务。可以选用Web服务或者WCF都可以。
zhuaizhuaihenguai 2018-05-09
  • 打赏
  • 举报
回复
WCF调用,建立接口,然后前后端接口对应
  • 打赏
  • 举报
回复
哦,上面的回复是回答 lz 的最后的问题的。 程序设计最重要的,肯定不是简单的某条“语句的”执行效率问题,而是一个功能算法、界面生成修改定制发布发的工程化考虑。
  • 打赏
  • 举报
回复
引用 13 楼 Seilboy 的回复:
if else效率低不低要看你条件判断的语句效率
跟执行效率高低没有关系,主要是考虑实用性、扩展性。汇编语言就单个一个语句而言肯定比c语言效率还“高”,那为什么不用汇编语言呢?
李敢敢 2018-05-08
  • 打赏
  • 举报
回复
webservice wcf啥的都可以
大鱼> 2018-05-08
  • 打赏
  • 举报
回复
发送请求难道不是对应相关接口传入相对应的参数去请求么?感觉你的需求用webservice就可以了啊,没必要使用Socket。
imyizhenfeng 2018-05-07
  • 打赏
  • 举报
回复
存储过程就可以解决
token不能为空 2018-05-07
  • 打赏
  • 举报
回复
if else效率低不低要看你条件判断的语句效率
canglongzhan 2018-05-07
  • 打赏
  • 举报
回复
可以考虑用Attribute给方法或类注入额外的属性或标注,服务器初始化的时候将方法和Attribute一次读取并存储起来,根据请求的接口名称调用对应的方法
维秀斯丢丢 2018-05-07
  • 打赏
  • 举报
回复
switch也可以啊。
desperaso 2018-05-07
  • 打赏
  • 举报
回复
WebService带库的简单示例 https://pan.baidu.com/s/1yZAQ2c3FxsrEai-jgvDQRA
nry19871012 2018-05-06
  • 打赏
  • 举报
回复
换成B/S方式
全栈极简 2018-05-06
  • 打赏
  • 举报
回复
知识点:socket、序列化/反序列化、策略设计模式、定义接口规范(文档)。
  • 打赏
  • 举报
回复
通讯中传送一个命令(命令中当然就包含了丰富的数据,或者说命令其实就是数据信令),在另外一端使用反序列化方法从消息中解析得到具体的 ICommand,然后执行它,得到结果,再将结果序列化并封装作为返回命令。不用什么 if....else.....方式,而是这里需要反序列化。 比如说 dic 字典中有200种 ICommand 具体的子类型,每一种对应某个名称的命令。那么在传来的序列化文本中,就包括了要访问的服务命令的名字。那么直接从dic字典中得到目标解析类型,直接写一句话——反序列化——就行了。就能处理这200种命令了。用不着什么 if...else....方式。
xuzuning 2018-05-05
  • 打赏
  • 举报
回复
网路中的交互都是一问一答的,如果你想避免繁琐的 if else if else ...,那就模式化会话内容,以查表方式规范行为
  • 打赏
  • 举报
回复
引用 2 楼 qq_38977099 的回复:
不太明白
那可能就是有太多的中间知识、基础概念还没有学过。
  • 打赏
  • 举报
回复
嗯,上面的代码有点错误,修改一下。 实际上你需要一个类型的字典,例如 Dictionary<string, Type>,记录了命令跟其对应的 ICommand 的具体类型的对应关系。例如
var dic = new Dictionary<string, Type> { { "adfa", typeof(Command1) } };
之类的数据库来记录对应解析命令的类型。 然后例如收到 {type="abc", str: ......} 这类消息,写
var cmd = (ICommand)Newtonsoft.Json.JsonConvert.DeserializeObject(str, dic[type]));
获得 ICommand,再来执行它。 信令设计比这个稍微复杂一点,除了知道 type、str 内容之外,可能还需要知道序号(用来返回消息时也给一个对应的序号),以及其它信息。 总之这叫做信令设计。你做任何通讯都应该先拿来信令设计文档读一下。
Sqsdhc 2018-05-05
  • 打赏
  • 举报
回复
引用 1 楼 sp1234 的回复:
通讯的解析是用接口。例如对于接口
public interface ICommand
{
    object Execute();
}
来说,假设能收到的消息字符串是str,通过(例如)
var cmd = Newtonsoft.Json.JsonConvert.DeserializeObject<ICommand>(str);
var result = cmd.Execute();
这种形式就能得到结果了。 所谓的反射、工厂之类的说法,其实也就是这种时候才需要用一下。一个程序可能有上万行代码,只有2、3处代码才需要反射或者反序列化,其它的地方都不能滥用反射等等纯解析的机制。这类通讯命令处理网关驱动的地方就是一例。
不太明白
  • 打赏
  • 举报
回复
通讯的解析是用接口。例如对于接口
public interface ICommand
{
    object Execute();
}
来说,假设能收到的消息字符串是str,通过(例如)
var cmd = Newtonsoft.Json.JsonConvert.DeserializeObject<ICommand>(str);
var result = cmd.Execute();
这种形式就能得到结果了。 所谓的反射、工厂之类的说法,其实也就是这种时候才需要用一下。一个程序可能有上万行代码,只有2、3处代码才需要反射或者反序列化,其它的地方都不能滥用反射等等纯解析的机制。这类通讯命令处理网关驱动的地方就是一例。

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧