在Cocoa中是否有一种方法目前被认为是创建多层或客户端服务器应用程序的最佳实践?
我是一位经验丰富的网络开发人员,我非常喜欢Python.我虽然是Cocoa的新手.我正在写的应用程序是一个大型医院的患者管理系统.预计系统会随着时间的推移存储大量数据,但在单个会话期间传输的数据非常轻(大多数只是文本).假设通信通过本地网络(有线或无线)发生.当然,它必须是高度安全的.
我能想到的最好的方法是编写一个Python REST Web服务并通过Cocoa应用程序连接到它.也许我甚至会使用Python来编写Cocoa应用程序本身.
看看Cocoa,我在Cocoa中看到了非常棒的技术,比如CoreData,但我找不到任何与客户端服务器开发类似的技术.我只是想确保我没有遗漏任何东西.
你怎么看?
真实世界的例子将不胜感激.
提前致谢.
据我所知,云计算可能是软件架构师的演变,它将取代目前的一些架构,如客户端 - 服务器.
这两个架构似乎与我有相似之处(我对两者都知之甚少),但我不知道它们之间的差异.云计算在客户端 - 服务器架构上的缺点和优势是什么?
非常感谢.
我在Stackoverflow上看过几个SQLite性能问题,但重点是网站,我正在考虑在客户端 - 服务器场景中使用这个数据库:
与使用PostgreSQL相比,使用SQLite会使应用程序的响应性降低吗?我的直觉告诉我,对于这些负载应该没问题,但也许有人对这种情况有一些实际经验.
我看了一下网站和谷歌,但我似乎无法找到一个很好的解决方案,我正在尝试做什么.
基本上,我有一个客户端服务器应用程序(C#),我向服务器发送一个SQL select语句(连接到SQL Server 2008),并希望以CSV方式将结果返回给客户端.
到目前为止,我有以下内容:
if (sqlDataReader.HasRows)
{
while(sqlDataReader.Read())
{
//not really sure what to put here and if the while should be there!
}
Run Code Online (Sandbox Code Playgroud)
}
不幸的是,我真的很想将C#与SQL连接起来.我需要有关如何简单地将结果放在csv格式的字符串中的任何提示.列和字段可能会有所不同,所以我不能像在一些网站上看到的那样使用某种东西的方法.我不确定我是否可以理解了!
我非常感谢有关如何解决这个问题的任何提示/要点!
我正在制作一个客户端服务器MMO风格的游戏.到目前为止,我已经设置了框架,以便服务器和客户端相互交互以提供状态更新.服务器维护游戏状态并定期计算下一个状态,然后每隔一段时间(每n毫秒)将其发送给所有客户端.用户可以在客户端查看和响应该新状态.然后将这些操作发送回服务器进行处理并发送出去进行下一次更新.
显而易见的问题是这些更新需要时间在服务器和客户端之间传输.如果客户端的行为由该更新已经得到回服务器的时间来攻击敌人,这是非常有可能的服务器已经进行了比赛状态足够远,敌人是在同一地点不再,并超出范围.
为了解决这个问题,我一直试图找到一个好的解决方案.我看了下面的内容,它帮助了一些,但并非完全:Mutli Player Game同步.我已经得出结论,我不仅可以传输游戏的当前状态,而且可以传输其他信息,例如方向(或AI运动的目标位置)和速度.从此,我的是需要"猜"的东西,在客户端部分,实际状态是通过什么进行游戏状态n毫秒到未来(如服务器看到它).
问题是确定进展状态的时间量,因为它将取决于服务器和客户端之间的滞后时间,这可能会有很大差异.此外,我应该将游戏状态推进到客户端查看时的状态(即只考虑更新到达客户端所花费的时间),还是应该将其推进到足够远以便在发送响应时回到服务器,到那时它将是正确的状态(来往于旅程的帐户).
有什么建议?
重申:
1)计算发送和接收之间的时间量的最佳方法是什么?
2)我是否应该将客户端状态推进到足以计入整个往返时间,或者只是将数据从服务器提供给客户端所需的时间?
编辑:到目前为止我想出了什么
由于我已经有许多数据包在客户端和服务器之间来回传递,我不想在必要时添加到该流量.目前,客户端向服务器发送状态更新数据包(UDP)〜150毫秒(仅在某些内容发生变化时),然后由服务器接收和处理这些数据包.目前,服务器不会对这些数据包发送任何响应.
首先,我将让客户尝试估计他们的滞后时间.我将它默认为50至100毫秒.我建议大约每2秒(每个客户端)服务器将立即响应其中一个数据包,在特殊的定时更新数据包中发回数据包索引.如果客户端收到定时数据包,它将使用索引来计算此数据包发送的时间,然后使用数据包之间的时间作为新的延迟时间.
这应该使客户合理地保持最新的延迟,同时避免过多的网络流量.
声音可以接受,还是有更好的方法?这仍然没有回答问题二.
我想用PlayN创建一个客户/服务器卡片游戏,例如Hearts.虽然我主要关注的是HTML5输出,但我理想的是,如果我决定将来制作一个Android客户端,我希望能够与输出平台无关.我该如何处理RPC机制?
这些是我想到的选项:
GWT.create(MyService.class)(或至少是它的包装器)生成的GWT Async接口.我不知道这对非HTML版本有多好.我可以直接从客户端Java代码使用GWT-RPC吗?我试图在body onload中加载2个javascript事件/函数,如下所示: -
<body onLoad="getSubs(document.form1.HotelID.options[document.form1.HotelID.selectedIndex].value);getTags(document.form1.HotelID.options[document.form1.HotelID.selectedIndex].value);">
Run Code Online (Sandbox Code Playgroud)
每当我使用2个函数加载时,第一个函数就会中止 - 但是如果我只加载它就可以正常工作 - 我做错了是不可能在onload中放入2个函数?
是否可以知道数据库中某些表的内容何时以及是否已更改?我的SQL Server如何通知客户端应用程序数据被另一个用户更改?如何使用dbGo实现查询通知?
我的客户是否需要轮询数据库,或者是否有回调机制?
我的客户端是Delphi应用程序TADODataSet,我的服务器是SQL Server 2005/2008,为多个客户端提供服务.
我想获得类似于此的行为:
问题是,当我的函数excCommand("help")运行时,只接收并打印一个小文本.我的文本文件是这样的:
COMMAND HELP:
help - Display help
quit - Shutdown client
Run Code Online (Sandbox Code Playgroud)
仅打印命令帮助.另一个问题是,当我输入命令时,没有打印任何内容,并且在2命令客户端退出之后.特别是这件作品:
while (quit)
{
getLine("client> ", command, 10);
if (strcmp(command, "quit") == 0)
quit = 0;
else
excCommand(command);
}
Run Code Online (Sandbox Code Playgroud)
这是服务器:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "common.h"
int main(int argc, char *argv[])
{
if (argc != 2)
ErrorWithUserMessage("Parameter(s)", "<Server Port>");
char *service = argv[1];
int servSock = SetupTCPServerSocket(service);
if (servSock < 0)
ErrorWithUserMessage("SetupTCPServerSocket() failed: ", "unable to establish");
unsigned int …Run Code Online (Sandbox Code Playgroud) client-server ×10
sql-server ×2
architecture ×1
c ×1
c# ×1
cloud ×1
cocoa ×1
delphi ×1
events ×1
gwt-rpc ×1
html ×1
ios ×1
java ×1
javascript ×1
json ×1
performance ×1
playn ×1
pyobjc ×1
python ×1
recv ×1
resultset ×1
rpc ×1
send ×1
sockets ×1
sql ×1
sqlite ×1
udp ×1
web-services ×1