首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >服务器对客户端通信体系结构

服务器对客户端通信体系结构
EN

Stack Overflow用户
提问于 2012-11-26 22:23:12
回答 1查看 1.3K关注 0票数 4

我们有一个“交易复制”软件,顾名思义,它用于将交易从一个交易者(发送者)映射到多个其他交易者(接收者)。它有三个主要组成部分:

1.发件人客户端.

2.服务器.

3.接收客户端.

发件人->服务器->接收器

发送方是使用MQL脚本构建的。MQL是为使用C++构建的交易商编写的一种编程语言。由于有一个发件人,发送方代码将交易信息(或信号)推送到服务器。服务器基于PHP,有一个简单的MySQL数据库,管理员可以在该数据库中维护将该信号转发给的用户。接收机也是用MQL构建的。但是目前它是使用一种独特的技术构建的,为了表明我们对它不太确定,因为我们第一次接触到了代码,而原来的程序员并不像预期的那样出现在哪里。因此,回到问题,接收客户端有一段代码,似乎“轮询”服务器的任何更新。MQL使用C++库调用使用InternetOpenUrlA的InternetReadFile函数。现在,MQL每隔X毫秒向服务器发送一个请求,以查看是否有新的信号,并在找到它时提取它。如果提供MQL代码可以帮助我做到这一点。

现在来回答我的问题。

  1. 这是个好办法吗?如果接收用户增加了数百个,并且每个用户“轮询”服务器(或者它使用InternetReadFile做的任何事情),那么会发生什么呢?取决于X,它不是会在某一点上杀死服务器CPU吗?我认为这是作为一个拉服务实现的,而我认为服务器应该推出这些信息,而不是所有的接收客户端不断地请求。
  2. 如果对上述问题的回答是“这是一种糟糕的做法”,那么什么是最好的办法?将信号通过套接字通信从服务器推送到每个接收器是一个好主意吗?在接收端是否存在诸如“端口转发”和“更改IP”之类的问题?或者,它们能否以编程方式被克服?

乐意提供代码,进一步澄清。

EN

Stack Overflow用户

回答已采纳

发布于 2012-11-27 17:41:25

任何投票将导致延迟和产生额外的流量,你无法逃脱。理想情况下,您可能希望使用以太直接解决方案:“套接字到套接字”或异步推送,类似于zeromq(也在socket上,刚刚抽象)。

问题是:当你在交易终端运行时,你的努力值得吗?由于您从一个终端到另一个服务器,延迟已经是固有的。另外,由于接收方的执行以及代理的执行速度,您将被延迟。因此,最终,当市场移动,你会看到一个巨大的差异,原来和副本,这违背了解决方案的目的。这个功能实际上应该由代理提供,并在服务器api插件或管理器api中实现(至少)。除此之外,大多数经纪商的设置:延迟+价差+标记,如果希望通过复制“好的”交易获利,那么客户的任何优势都会被吞噬。

为了解决网络问题,由于您知道您的客户端正在运行mt4,所以您也知道应该在客户端机器上打开443个出站,因为这是mt4使用的。您还可以相当确信http(80)也是开放的,特别是因为当前的解决方案使用http进行通信。因此,如果您将服务器主机设置为443或80,并且您的发送方和接收方都作为客户端连接到您的服务器,那么客户机ip和防火墙设置就不重要了。除此之外,您始终可以实现某种基于文件的配置,以便在安装/故障排除过程中调整客户端的端口。最后,无论您的轮询还是异步您的网络问题都是一样的,这都归结为套接字上的tcp。

票数 4
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13574182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档