Questions tagged «client-server»

3
我是否应该使用HTTP状态代码来描述应用程序级别的事件
我处理过的几台服务器将返回HTTP 200,以请求客户端应认为失败的请求,其中的内容为“ success:false”。 在我看来,这似乎不是HTTP代码的正确实现,尤其是在身份验证失败的情况下。我已经很简洁地阅读了HTTP错误代码,其中“ 4xx”指示在更改之前不应该再次发出请求,而“ 5xx”指示该请求可能有效或无效,可以重试,但未成功。在这种情况下,200:登录失败,或200:找不到该文件,或200:缺少参数x,这肯定是错误的。 另一方面,我可以看到有人争论说“ 4xx”应仅表示请求的结构性问题。因此,这很适合返回200:错误的用户名/密码,而不是未经授权的401,因为允许客户端进行请求,但是恰好是错误的。这个论点可以概括为:如果服务器能够处理请求并做出确定,则响应代码应为200,并且由客户端检查主体以获取更多信息。 基本上,这似乎是一个优先事项。但这并不令人满意,因此,我想知道,如果有人有理由说明这些范例中的任何一个更为正确。

3
客户端使用HATEOAS有什么意义?
据我目前的了解,HATEOAS基本上是与每个响应链接一起发送以及下一步操作的信息。在互联网上可以轻松找到一个简单的示例:银行系统和帐户资源。该示例显示了对帐户资源的GET请求后的此响应 GET /account/12345 HTTP/1.1 HTTP/1.1 200 OK <?xml version="1.0"?> <account> <account_number>12345</account_number> <balance currency="usd">100.00</balance> <link rel="deposit" href="/account/12345/deposit" /> <link rel="withdraw" href="/account/12345/withdraw" /> <link rel="transfer" href="/account/12345/transfer" /> <link rel="close" href="/account/12345/close" /> </account> 连同数据一起,有链接告诉下一步可以做什么。如果余额为负,我们有 GET /account/12345 HTTP/1.1 HTTP/1.1 200 OK <?xml version="1.0"?> <account> <account_number>12345</account_number> <balance currency="usd">-25.00</balance> <link rel="deposit" href="/account/12345/deposit" /> </account> 这样我们只能存款。很好,如果我们使用Fiddler或通过浏览器发出请求,我们可以轻松地看到可以做什么。这样的信息对于我们发现API的功能以及服务器与客户端的分离非常有用。 但是,要点是,当我们构建客户端(例如带有Javascript的SPA或Android应用程序或许多其他东西)时,我看不到HATEOAS如何继续发挥作用。我的意思是:当我用javascript编码SPA时,我必须知道可以在API中完成什么才能编写代码。 …


4
在一处管理客户端和服务器端验证
我在船上100%与1的情况应该 肯定使用了客户端和服务器端的数据验证。 但是,在我工作过的框架和环境中,我见过的方法从来都不是DRY。大多数情况下,没有计划或模式-验证写在模型规范中,而验证则写在视图上的表单中。(注意:我大部分的第一手经验是使用Rails,Sinatra和带有jQuery的PHP) 考虑一下,创建一个生成器似乎并不困难,只要生成一组验证(例如,模型名称,字段,条件),就可以生成必要的客户端和服务器端材料。或者,这种工具可以接受服务器端验证(例如validatesActiveRecord模型中的代码),并生成客户端验证(例如jQuery插件),然后将其应用于表单。 显然,以上只是“嘿,我有这个主意”,而不是正式的建议。这种事情肯定比这个主意击中时看起来要困难得多。 这使我想到一个问题:您将如何设计一种“一次写入,在服务器和客户端上运行”的数据验证技术? 相关子主题:是否存在针对任何特定框架或客户端服务器技术的类似工具?尝试仅维护一组验证有哪些主要难题或挑战?

3
如何在客户端/服务器实时视频游戏中处理速度更快的计算机
我正在使用socket.io创建我的第一个在线游戏,我希望它是像agar.io或diep.io这样的实时多人游戏。 但是我遇到了试图弄清楚如何使所有计算机以相同速度工作的问题。 我对模型有三个想法,但似乎都不对,我想知道普通电子游戏是如何做到的。(您可以跳过阅读我的想法;它们只是给您一种查看我遇到的问题的方法。) 服务器允许客户端自行运行,并将更新传递给服务器,然后服务器将其广播给其余的客户端。这样做的问题是,某些计算机的运行速度比其他计算机要快,因此它们的更新速度更快,并且在屏幕上的移动速度更快。 让服务器告诉客户端何时更新。然后,我可以等到最后一个客户端做出响应(如果一个人的计算机速度较慢,这是一个糟糕的主意),或者等到第一个客户端做出响应(再次,在每帧之前等待通信),或者尽可能快地发送它们(似乎遇到了与数字1相同的问题。 在游戏开始时,让服务器告诉客户端更新的速度。这意味着客户将负责限制这段时间之间的移动。例如,如果某人设法在该时间段内两次按下按钮,则只会发送一个按钮按下事件。这样做的问题是某些操作将被忽略(例如,按两次双键),并且交互将依赖于客户端的时钟,而这可能与服务器的时钟不匹配。然后,服务器将必须跟踪每个客户端,并确保在正确的时间提交其更新。 我已经进行了一些研究,但是我阅读的文章似乎并未具体说明如果客户端发送更新的速度比其他客户端快的话该怎么办。 在我的特定情况下,我正在与键盘速度更快的人打交道(他们的计算机比其他计算机发送更多的键盘更新)。 程序员通常如何处理呢?

4
与服务器生成的前端应用程序相比,Web应用程序中的客户端/服务器体系结构有哪些优势?
在我们公司中,我们需要在嵌入式Linux平台上构建Web界面。我看到2种选择:您使用一种在服务器端生成HTML和JavaScript的技术(认为JSP,Grails,但它是使用C ++并生成HTML / JavaScript的某种东西),或者您创建了HTML5“客户端”与JSON或XML生成后端对话的应用程序。 我觉得Web应用程序当前倾向于与后者配合使用,但是这样做有什么好处(项目的开发人员选择前者,主要是基于他们比C语言和HTML和Java脚本了解得多的事实)

3
我们是否已经全面采用微服务,又回到了非常古老的方法?
在软件架构和设计方面,微服务如何与中间件“堆叠”(双关语意)?我来自Java,似乎当您摆脱作为API的直接REST并抽象出不同的层和连接参数时,至少在Java中,您几乎已经完全回到了一些非常古老的想法。我们已经回到虚拟化……而JVM 已经是虚拟的。 以一种不可知论的方式,您可以并且我会争论将RESTful API抽象到CORBA的优点。或者,以Java为中心的方式,使用JMS或MDB。 EJB在Java上曾经是一个大问题,但在某种程度上它被认为是集群效果,但是现在,我们又回到了起点吗? 还是微服务提供了CORBA甚至更好的MDB所缺少的功能?当我读(TLDR)Martin Fowler解释微服务时,如果可以的话,它是解决一个严重问题的很好的解决方案。更确切地说,是一种封闭的方法,它引入了一定程度的复杂性,只能解决问题。如果这些服务确实是微服务,并且数量众多,则每个服务的运行和维护成本都为一美元。 此外,如果许多微服务中的一个微服务更改了其API,那么依赖该服务的所有内容都会中断。它并不显得松散连接,它似乎敏捷的对立面。还是我滥用这些话? 当然,在这些极端之间有很多不确定的选择。 鲨鱼与大猩猩...走吧! (对于书呆子来说,这具有讽刺意味,完全不是我的意图。这个问题是从表面上考虑的。如果这个问题可以改善,请这样做,或者发表评论,我会解决的。 ) 设想在docker上运行的多个微服务都在一台机器上互相交谈...疯狂。难以维护或管理,几乎不可能更改任何东西,因为任何更改都会级联并导致不可预见的错误。这些服务分散在不同的计算机上如何更好?而且,如果它们是分布式的,那么肯定可以解决某些非常非常古老的技术,至少在一定程度上解决了分布式计算的问题。 为什么水平缩放如此普遍,或者至少是可取的?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.