任何人都知道MMORPG开发人员最近加密他们的客户端/服务器协议的趋势是什么?
专业人士和骗子如下.
加密协议:
常规纯文本:
我在软件工程中一直在学习(和教学)的东西是代码重复是所有邪恶的根源.另一方面,我发现很难解释这个概念应该如何应用于Web应用程序的开发.
请允许我澄清一下......输入和数据验证可以是Web应用程序的重要组成部分.有时这种验证可能非常复杂.例如,我在拼图编辑器上工作,验证包括检查操作或移动是否有效.然后必须检查非平凡的规则.
当然,验证必须在服务器端完成,以确保存储数据的一致性和质量.但是,必须对客户端进行验证以确保顺畅的用户体验.
在大多数情况下,客户端和服务器端代码是用不同的语言编写的(即javascript/Python),因此验证代码必须编写两次.但是,根据我对GWT/Java(双方都是Java)的唯一体验,我发现可以重用大部分验证代码.这似乎使一切变得更容易:维护,重构,调试......
所以我的问题是:在客户端和服务器端语言不同的项目中,如何管理与代码重复相关的问题?
我一直在开始客户端 - 服务器应用程序.起初我自然地在Eclipse中创建了两个项目,两个源代码控制存储库等等.但我很快就发现两者之间有一些共享代码可能会从共享中受益(在同一个项目或共享库中)而不是复制.
另外,我一直在学习和尝试测试驱动开发,在我看来,基于真实的客户端组件进行测试会更容易,而不是只需要设置大量的代码来模拟某些东西,代码可能主要在客户端.在这种情况下,似乎将客户端和服务器放在一个项目中,由根包(org.myapp.client.*和org.myapp.server.,也许是org.myapp.shared.)进行了细分.
然而,我在合并客户端和服务器时最关心的是安全性; 如何确保代码的服务器部分不会到达用户的计算机?当Eclipse捆绑一个JAR时,我必须选择特定于服务器的位,并希望我不会错过任何一个,对吧?
因此,特别是如果您自己编写客户端 - 服务器应用程序(尤其是在Java中,尽管如果您想在其他语言中分享您的体验,这可能会变成与语言无关的问题),您保持什么样的分离?您的客户端和服务器代码之间?它们只是在不同的包/命名空间中,还是使用共享库完全不同的二进制文件,还是完全不同的东西?您如何一起测试代码然后单独发货?
我制作了一个Java Swing应用程序.现在我想把它变成一个Client-Server应用程序.当服务器上的数据发生变化时,应通知所有客户端,因此我不会寻找Web服务.Client-Server应用程序将在单个LAN上运行,它是一个业务应用程序.服务器将包含一个数据库JavaDB.
什么技术和库最容易入手?我应该使用套接字从头开始实现它,还是应该使用Java RMI,或者JMS?或者还有其他更容易入手的替代方案吗?
我应该使用任何服务器库吗?Jetty是替代品吗?
通常,在编写Web应用程序时,我们希望在客户端执行验证以提供即时反馈,并在服务器端执行验证以确保数据完整性和安全性.但是,客户端浏览器应用程序通常使用JavaScript编写.服务器端可以用Java,Php,Ruby,Python和许多其他语言编写.当服务器端由像node.js这样的东西支持时,在客户端和服务器上重用相同的验证代码真的很容易,但是如果服务器端基于Rails或Django(或者你可以命名的任何其他框架) ),确保验证代码保持同步的最佳方法是什么?在多种语言中重新实现相同的代码似乎有点多余.
目前,我正在使用AsyncTask来处理Http连接并以JSON格式检索数据.
加载所有数据是微不足道的,但它消耗了太多时间,所以我决定使用LIMIT OFFSET(mysql)一次切换到加载10个项目.
接下来,我onScroll为列表视图设置事件,以便AsyncTask每次用户滚动时创建一个新事件.但是,从我读到的,AsyncTask存储在一次限制5个线程的线程池中,所以我不确定这是一个正确的方法.我是客户/服务器应用程序的新手,所以我可以在这个问题上给我一个建议吗?任何相关的文章,文档将不胜感激.
我获得了一个HTTPCookie,但需要一个Net.Cookie.它们只是你可以重铸的东西,或者我将如何去做?
我已经阅读了很多关于MVC的出版物,但我仍然无法清楚地理解为什么我们需要"控制器".
我经常在客户端 - 服务器模型中编写应用程序
服务器包含所有的业务逻辑,它对gui一无所知.它完成了主要工作,并且尽可能便携.
client是一个GUI,它绑定到服务器,与用户交互,从用户向服务器发送命令.
我喜欢这种架构,我无法弄清楚为什么人们真的需要在客户端和服务器之间再添一个媒体,这似乎是控制器?
UPD:简单示例:假设我们需要编写一些数据记录器.数据来自COM端口,它由某些协议编码.需要在简单的日志窗口中显示收到的消息.
我该怎么做:
服务器包含以下项目:
Data_receiver:其实从COM端口接收到的原始数据,但它的接口,所以我们能够做出一些从其他来源接收数据,另一个类;Data_decoder:获取原始数据并返回生成的解码消息,它也是接口,因此我们可以轻松地更改编码协议;Data_core:在使用的情况下Data_receiver和Data_decoder,发射信号到客户端.客户端包含以下项目:
Data_receiver(连接到COM端口的那个)Data_decoder和Data_core(它接受引用Data_receiver和Data_decoder实例)的实例,还创建GUI简单的日志窗口(参考Data_core);Data_core,即侦听由其发出的信号,并显示接收的数据.当我理解我所读到的关于MVC的内容时,GUI实际上不应该从中接收消息Data_core,因为控制器应该这样做,然后将数据传递给GUI.但是如果GUI直接从模型中获取这些数据会发生什么不好的事情?
我正在与Jon Skeet先前的讨论建立起来.
我的方案的要点如下:
此时,我理解使用客户端生成的UUID作为数据库中对象的PK是不好的做法.原因是恶意用户可以修改生成的UUID并强制我的数据库上的PK冲突.
为了减轻因在PlaylistItem上强制PK冲突而导致的任何损害,我选择将PK定义为两个ID的组合 - 客户端生成的UUID和服务器生成的GUID.服务器生成的GUID是PlaylistItem的播放列表ID.
现在,我一直在使用这个解决方案,但我不明白为什么/相信我的解决方案比简单地信任客户端ID更好.如果用户能够强制PK collison与另一个用户的PlaylistItem对象,那么我认为我应该假设他们也可以提供该用户的PlaylistId.他们仍然可以强制使用collisons.
是的.做这样的事情的正确方法是什么?允许客户端创建UUID,服务器在成功保存后会竖起大拇指.如果发现冲突,请恢复客户端更改并通知检测到的collison?
在将数据从Web服务器重新加载到前端时,我正在寻找"走的路"(即最有效,最常用,最普遍接受的方式).在最终的应用程序中,我将有几个输出字段,其中必须写入数据,例如:

在最终应用程序中,数据流将彼此不同.这些行必须从服务器重新加载新的最新数据.
我一直在考虑使用Ajax请求来像每秒更新,但必须有另一种方法来做到这一点.Ajax请求将导致大量数据流量.此外,当使用Facebook聊天时,您不必每秒钟等待,几乎立即收到聊天.但是,当我使用Mozilla Firefox的开发人员工具时,我没有看到任何Ajax轮询请求.这让我想到是否会有不同的方式来做到这一点.
我查看了Node.js,但看起来我的主机无法实现.
我听说有人在谈论Ajax Push,我应该使用什么?如果是这样,你能给我一个基本的用法例子吗?
如果没有,那么当拥有多个必须在一秒钟内重新加载的数据流时,会有什么方法呢?
要求是速度和低数据流量.因此,我认为不能连续轮询服务器,因为这会产生巨大的开销.
我认为它没有任何重要性,但我在后端使用PHP5.3,在前端使用jQuery 1.9.1的JavaScript.
client-server ×10
java ×2
javascript ×2
android ×1
architecture ×1
asp.net ×1
bots ×1
client-side ×1
comet ×1
cookies ×1
encryption ×1
guid ×1
gwt ×1
http ×1
networking ×1
php ×1
primary-key ×1
stream ×1
swing ×1
validation ×1
webclient ×1