标签: client-server

如何同步客户端验证和服务器端验证?

通常,在编写Web应用程序时,我们希望在客户端执行验证以提供即时反馈,并在服务器端执行验证以确保数据完整性和安全性.但是,客户端浏览器应用程序通常使用JavaScript编写.服务器端可以用Java,Php,Ruby,Python和许多其他语言编写.当服务器端由像node.js这样的东西支持时,在客户端和服务器上重用相同的验证代码真的很容易,但是如果服务器端基于Rails或Django(或者你可以命名的任何其他框架) ),确保验证代码保持同步的最佳方法是什么?在多种语言中重新实现相同的代码似乎有点多余.

architecture validation client-server

8
推荐指数
1
解决办法
1412
查看次数

如何在C#中获取服务器和客户端之间的延迟?

我正在为一个游戏引擎开发一个C#Server应用程序,我正在用ActionScript 3编写.我正在使用权威服务器模型来防止作弊并确保公平游戏.到目前为止,一切运作良好:

当客户端开始移动时,它会告诉服务器并在本地开始渲染; 然后,服务器告诉其他人客户端X已经开始移动,其中包含详细信息,以便他们也可以开始渲染.当客户端停止移动时,它会告诉服务器,该服务器根据客户端开始移动的时间执行计算,并且客户端呈现滴答延迟并回复所有人,因此他们可以使用正确的值进行更新.

问题是,当我在服务器计算中使用默认的20ms滴答延迟时,当客户端移动相当长的距离时,当它停止时会有明显的向前倾斜.如果我将延迟略微增加到22ms,在我的本地网络上一切都运行得非常顺利,但在其他地方,倾斜仍然存在.经过一番实验后,我注意到所需的额外延迟几乎与客户端和服务器之间的延迟有关.我甚至把它煮成了一个非常好的公式:延迟= 20 +(延迟/ 10).

那么,我将如何继续获取某个客户端和服务器之间的延迟(我正在使用异步套接字).CPU的工作量不能太大,因为没有服务器运行缓慢.此外,这真的是最好的方式,还是有更有效/更简单的方法来做到这一点?

.net c# sockets latency client-server

7
推荐指数
2
解决办法
1万
查看次数

FPS多人游戏服务器更新客户端的一般策略是什么?

我和朋友正在讨论FPS服务器如何更新连接到它的客户端.我们观看了一个在战地:Bad Company 2中作弊的人的视频,看到它如何突出显示屏幕上敌人的位置,这让我们思考.

他的论点是,服务器只使用与客户端直接相关的信息更新客户端.即,如果敌人玩家距离客户太远或者出于效率原因而离开客户的视线,服务器将不会发送有关敌方玩家的信息.但他不确定 - 他提出了一个隐藏在岩石后面的人的例子,无法看到任何人.如果玩家突然出现在他的视线中有三名玩家的位置,那么在他们在屏幕上渲染之前会有50ms的延迟,而服务器会传输必要的信息.

我的论点恰恰相反:服务器向客户端发送有关每个玩家的所有信息,并让客户端理清允许的内容和不允许的内容.我认为,对于服务器来说,只需将所有内容发送到客户端并让客户端执行繁重的工作,实际上计算成本会更低.我还想到这是骗子程序如何工作 - 他们拦截服务器数据包,获取敌人的位置,然后在客户端的视图中显示它们.

所以问题是:现代第一人称射击服务器用来保持客户更新的一般政策或策略是什么?

client-server frame-rate multiplayer

7
推荐指数
1
解决办法
2926
查看次数

32位 - 64位进程间通信

我的任务是实现基于Win32的xml编辑器作为前端进程,而业务逻辑将通过64位进程处理.此外,两个进程之间的通信将通过消息总线完成,消息总线只能传输表单的消息wchar_t *.(是的,它太糟糕了).

假设您只C++ 03掌握在手中,没有外部库支持,例如Boost什么是这项任务的最佳设计?用例是用户只需编辑一些.xml文件.

我想在业务逻辑模块中有一个函数指针表来处理不同的消息,然后返回"监听"事件.

侧面问题是否有任何"简单"的方法将对象序列化为字符串?

非常感谢.

编辑:

现在允许提升.我应该选择ASIO还是MPI?我想第一个对吗?

c++ client-server inter-process-communicat 32bit-64bit

7
推荐指数
1
解决办法
1431
查看次数

使用Erlang的最佳,最有效的客户端池技术是什么

我是一个真正的Erlang新手(1周前开始),我正在尝试通过创建一个小而有效的聊天服务器来学习这种语言.(当我说效率时,我的意思是我有5台服务器用于对数十万个连接客户端进行压力测试 - 百万将是很棒的!)

我找到了一些教程这样做,唯一的是,我找到的每个教程都是IRC之类的.如果一个用户发送邮件,则除发件人之外的所有用户都将收到邮件.我想稍微改变一下,并使用一对一的讨论.

搜索连接用户的最有效客户端池是什么?我考虑过注册这个过程,因为它似乎做了我需要的一切,但我真的不认为这是更好的方法.(或者最好的方式去做).

有人会有这样的建议吗?

编辑:

每个连接的客户端都会受到ID的影响.

当用户连接时,它首先发送一个登录命令来给它的id.当用户想要将消息发送给另一个消息时,该消息看起来像这样

[ID-NUMBER][Message] %% ID-NUMBER IS A FIXED LENGTH

当我要求"最有效的客户端池"时,我实际上正在寻找在连接的客户端列表上检索/添加/删除一个客户端的最快方法,这可能很大(数十万 - 可能是数百万)

编辑2:

回答一些问题:

  • 我正在使用Raw Socket(现在使用telnet与服务器通信) - 稍后可能会转移到ssl ...
  • 这是我自己的协议
  • 每个客户都是一个衍生出来的Pid
  • 每个客户端的Pid都链接到它自己的监视器(主要是出于调试原因 - 如果断开连接,客户端应该从头开始auth重新连接)
  • 我在开始编码之前已经阅读了几本书,所以我还没有掌握Erlang的各个方面,但我并没有意识到它,我会在需要时阅读更多关于它的信息.
  • 我真正想要的是存储和搜索PID以便直接从进程到进程发送消息的最佳方法.

我应该使用列表编写自己的搜索客户端功能吗?

或者我应该使用ets?

甚至使用register/2 unregister/1和whereis/1来维护我的客户端列表,使用它的唯一id作为atom,它似乎是最简单的方法,我真的不知道它是否有效,但我我很确定这是丑陋的解决方案;-)?

sockets erlang client-server server-side

7
推荐指数
1
解决办法
1288
查看次数

Python在接收​​行的末尾添加额外的CR

Java应用程序将XML发送到Python应用程序.他们都在同一台机器上.当我打开收到的文件时,我可以看到额外的行(因为额外的CR).这可能是什么原因?

这是接收者:

f = open('c:/python/python.xml', 'w')
while 1:
    print("xxx")        
    data = socket.recv(recv_frame)
    remain_byte = remain_byte - len(data)
    print(remain_byte)
    f.write(data)
    if (something):
        break
Run Code Online (Sandbox Code Playgroud)

这是发件人:

    while ((bytesRead = file_inp.read(buffer)) > 0) {
        output_local.write(buffer, 0, bytesRead);
    }
Run Code Online (Sandbox Code Playgroud)

这是原始文件:

<root><CR><LF>
    <SONG><CR><LF>
        <ARTIST>Coldplay</ARTIST><CR><LF>
    </SONG><CR><LF>
</root><CR><LF>
Run Code Online (Sandbox Code Playgroud)

这是收到的:

<root><CR>
<CR><LF>
    <SONG><CR>
<CR><LF>
        <ARTIST>Coldplay</ARTIST><CR>
<CR><LF>
    </SONG><CR>
<CR><LF>
</root><CR>
<CR><LF>
Run Code Online (Sandbox Code Playgroud)

python java sockets client-server carriage-return

7
推荐指数
1
解决办法
481
查看次数

客户端/服务器通信中的中间件

我正在用C++构建一个客户端/服务器对,我用它winsock来进行通信.但是,我无法在C++中找到任何可以实现某些内容的库,而不是直接从客户端向服务器发送请求,而是存储请求,稍后将与服务器进行通信.

有没有任何方法或库可以将请求发送到像经纪人这样的东西,反之亦然?将存储请求的东西,然后将与服务器通信.这些是我已经使用的库:

#pragma comment( linker, "/defaultlib:ws2_32.lib")
#include <WinSock2.h>
#include <winsock.h>
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <windows.h>
#include <ws2tcpip.h>
#include <fstream>
using namespace std;

#define HOSTNAME_LENGTH 20
#define RESP_LENGTH 40
#define FILENAME_LENGTH 20
#define REQUEST_PORT 5001
#define BUFFER_LENGTH 1024 
#define TRACE 0
#define MSGHDRSIZE 8 //Message Header Size
Run Code Online (Sandbox Code Playgroud)

client-server winsock visual-c++ broker

7
推荐指数
1
解决办法
616
查看次数

在phonegap应用程序中捆绑python"后端"代码

短版:

有没有一种标准方法将Python"后端服务器"类型代码与phonegap客户端应用程序捆绑在一起?

长版:

我有很多应用程序,我正在考虑移植到phonegap.通常,应用程序是用Python编写的.其中一些有Web前端,其中一些是独立的Python应用程序,其接口基于wxpython.

所以每个应用程序都有一些客户端的东西,已经在html + javascript + css,或者我很乐意翻译成html + javascript + css.

对于服务器端,对于某些应用程序,可以将服务器代码保留在服务器上.但对于某些/大多数人来说,我想将服务器端逻辑打包到phonegap应用程序中,因此它可以是一个独立的应用程序.这个要求来自两个需求.一个是这些应用程序中的许多应用程序用于紧急响应,即使在无法使用手机信号塔和其他网络基础设施时也需要工作.另一个很简单,一些应用程序非常简单,并且不保证客户端/服务器架构 - 它们碰巧有很多用Python编写的"后端逻辑"类型代码.

现在,我知道我可以将所有后端Python逻辑移植到javascript,但我希望找到一个解决方案,其中这个相当大的代码库可以保留在Python中.

我的想法是,我可以编写一个实际上包含完整Python解释器的phonegap插件(至少足以处理我的代码库中的大部分内容).(也就是说,iOS和Android都允许本机C代码,所以我应该能够从源代码编译Python - 或者至少编译它 - 或者只是链接到其他人构建的iOS和Android Python库.)

所以在javascript代码中,我可以让客户端调用一些函数,如"InvokeBackEndMethod()".这很像ajax调用,但它不会在网络上调用,而是将查询/ url/message发送到Python插件.我的理解是,phonegap插件可以保持持久状态(例如,数据库插件允许您进行一次调用以打开数据库,然后调用从中读取并关闭它).因此,Python"服务器"代码可以像在真实服务器上一样维护其状态.事实上,Python代码可能正在运行像cherrpy这样的Web框架,因此它真的就像在同一个移动应用程序中运行客户端和服务器一样.

我的问题是:

(1)该计划听起来合理吗?

(2)有人已经解决了这个问题吗?我希望找到一个名为"phonegap server"的项目,它本质上是一个"通用"的PhoneGap扩展,从某种意义上来说它会接受来自客户端的任意调用,并会将这些调用发送给您选择的各种机制:Python,Java,单声道等(即,这种通用的phonegap扩展将被各种语言"插件""扩展",然后这些插件将被用户在给定的任何业务逻辑"扩展"语言).可能大多数人都不需要这样的项目,因为他们没有要求断开连接和/或他们没有"后端"逻辑的大代码库他们' 我想在一个独立的应用程序中部署,但保留原始语言.但似乎有些人必须要这样做,不是吗?

python plugins client-server cordova

7
推荐指数
1
解决办法
5852
查看次数

在没有服务器的Javascript中客户端之间进行通信

我正在寻找一种在Javascript/HTML5中两个客户端之间进行通信的方法,而不使用服务器端脚本.我不能使用NodeJs.

有没有办法连接两个客户端?谢谢.:)

javascript html5 client-server client-side

7
推荐指数
1
解决办法
1312
查看次数

QSslSocket:无法解析SSLV2_client_method

我在debian wheezy的Qt 5.4.1中使用QSslSocket创建了一个sslclient和sslserver.当我运行程序时,他们根本不工作.在调试我的代码后,我看到它在尝试从中创建一个新对象时,在约束器中QSslSocket返回此错误(cannot resolve SSLV2_client_method).

这是我的代码块:

SSlClient::SSlClient(QObject *parent) : QObject(parent)
{
    client = new QSslSocket(this);
    client->setProtocol(QSsl::SslV3);

    connect(client, SIGNAL(encrypted()), this, SLOT(startTransfer()));
    connect(client, SIGNAL(encryptedBytesWritten(qint64)), this, SLOT(byteWritten()));


}
Run Code Online (Sandbox Code Playgroud)

qt client-server qtcpsocket qtcpserver qsslsocket

7
推荐指数
1
解决办法
7126
查看次数