我们有一个“交易复制”软件,顾名思义,它用于将一个交易者(发送者)的交易镜像到多个其他交易者(接收者)。它包含三个主要组件:
<强>1。发件人客户端。
<强>2。服务器。
<强>3。接收方客户端。
发送方 -> 服务器 -> 接收方
发件人是使用MQL构建的脚本。 MQL 是一种使用 C++ 构建的交易者编程语言。由于只有一个发送者,发送者代码将交易信息(或信号)推送到服务器。 服务器是基于 PHP 的,带有一个简单的 MySQL 数据库,管理员可以在其中维护将此信号转发给的用户。 接收器也是使用 MQL 构建的。但目前它是使用一种独特的技术构建的,明确表示我们对此不确定,因为我们是第一次接触代码,而且找不到原始程序员(正如预期的那样)。回到问题,接收方客户端有一段代码似乎“轮询”服务器以获取任何更新。 MQL 使用 C++ 库来调用使用 InternetOpenUrlA 的 InternetReadFile 函数。现在,MQL 每 X 毫秒向服务器发送一个请求,以查看是否有新信号并在找到时将其拉出。如果提供 MQL 代码有帮助,我可以做到。
现在回答我的问题。
这是一个好方法吗?如果接收用户增长了数百个,并且每个用户每隔 X 毫秒“轮询”服务器(或使用 InternetReadFile 进行的任何操作),会发生什么情况。取决于 X,它不会一次性杀死服务器 CPU 吗?我认为这是作为拉取服务实现的,而我认为服务器应该推出此信息,而不是所有接收方客户端不断请求。
如果上述问题的答案是“这是一个糟糕的方法”,那么最好的方法是什么?通过套接字通信将信号从服务器推送到每个接收器是个好主意吗?接收方客户端是否存在诸如“端口转发”和“更改 IP”之类的预期问题?还是可以通过编程克服它们?
很高兴提供代码,进一步说明。
强>强>强>最佳答案
任何轮询都会引入延迟并产生额外的流量,这是您无法避免的。理想情况下,您会希望使用以太直接解决方案:“套接字到套接字”或使用 zeromq 之类的异步推送(顺便说一句,也通过套接字,只是抽象)。
问题是:当您在交易员终端内运行时,是否值得付出努力。由于您要从终端到服务器再到终端,延迟已经是固有的。另外,您会因接收方的执行以及经纪人的执行速度而延迟。所以最后,当市场移动时,您会看到原始版本和拷贝之间的巨大差异,这违背了解决方案的目的。这个功能确实应该由代理提供并在服务器 api 插件或管理器 api 中实现(至少)。缺少大多数经纪商设置:延迟 + 点差 + 加价将吞噬您的客户如果希望通过复制“良好”交易获得的任何优势。
为了解决网络问题,因为您知道您的客户端正在运行 mt4,您也知道应该在客户端机器上打开 443 出站,因为这就是 mt4 使用的。您也可以相当确信 http(80) 也是开放的,特别是因为当前的解决方案使用 http 进行通信。因此,如果您将服务器托管在 443 或 80 上,并且您的发送方和接收方都作为客户端连接到您的服务器,则客户端 ip 和防火墙设置应该无关紧要。除此之外,您始终可以实现某种基于文件的配置,以便您可以在安装/故障排除期间调整客户端的端口。最后,无论您的网络问题是轮询还是异步,都归结为套接字上的 tcp。
关于c++ - 服务器到客户端通信架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13574182/
我正在尝试使用ruby和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我
我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..
我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru
在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo
我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b
您如何在Rails中的实时服务器上进行有效调试,无论是在测试版/生产服务器上?我试过直接在服务器上修改文件,然后重启应用,但是修改好像没有生效,或者需要很长时间(缓存?)我也试过在本地做“脚本/服务器生产”,但是那很慢另一种选择是编码和部署,但效率很低。有人对他们如何有效地做到这一点有任何见解吗? 最佳答案 我会回答你的问题,即使我不同意这种热修补服务器代码的方式:)首先,你真的确定你已经重启了服务器吗?您可以通过跟踪日志文件来检查它。您更改的代码显示的View可能会被缓存。缓存页面位于tmp/cache文件夹下。您可以尝试手动删除
如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:
MIMO技术的优缺点优点通过下面三个增益来总体概括:阵列增益。阵列增益是指由于接收机通过对接收信号的相干合并而活得的平均SNR的提高。在发射机不知道信道信息的情况下,MIMO系统可以获得的阵列增益与接收天线数成正比复用增益。在采用空间复用方案的MIMO系统中,可以获得复用增益,即信道容量成倍增加。信道容量的增加与min(Nt,Nr)成正比分集增益。在采用空间分集方案的MIMO系统中,可以获得分集增益,即可靠性性能的改善。分集增益用独立衰落支路数来描述,即分集指数。在使用了空时编码的MIMO系统中,由于接收天线或发射天线之间的间距较远,可认为它们各自的大尺度衰落是相互独立的,因此分布式MIMO