草庐IT

erlang_programs

全部标签

tcp - 如何在 erlang gen_tcp 中同时处理一个客户端?

我有一个监听Ip:Port的TCP服务器。listen(Ip,Port)->Opts=[binary,{active,false},{packet,0},{reuseaddr,true},{ip,Ip}],casegen_tcp:listen(Port,Opts)of{ok,ListenSock}->?MODULE:loop_accept(ListenSock);{error,Reason}->exit(Reason)end.loop_accept(ListenSock)->{ok,Sock}=gen_tcp:accept(ListenSock),?MODULE:loop(Sock),

tcp - 如何处理 Erlang 中 TCP 流中数据包的错误长度 header ?

我正在使用gen_tcp在Erlang中通过TCP接收消息。根据{packet,4}选项的指定,流通过使用4字节长度的header分成数据包。这就是我调用gen_tcp:listen/2的方式:gen_tcp:listen(Port,[binary,inet,{active,once},{packet,4}]).如您所见,我使用了{active,once}选项,这样我就可以从进程邮箱中获取我的数据包,而不会淹没它。只要长度header正确,这就可以正常工作。如果不是,任何事情都可能发生。所以我想以某种方式处理错误数据包的可能性。这有点棘手,因为我实际上是在处理流。忽略错误的数据包是可以

haskell - Erlang 与 Haskell : When does one prefer one over the other?

什么时候更喜欢Erlang在Haskell?难道两者不能在一个进程中处理大量的TCP流量吗? 最佳答案 为什么不自己找出来呢?实用出版社制造SevenLanguagesinSevenWeeks其中包括Haskell和Erlang作为两种语言。虽然它不会让您成为专家,但您将有机会尝试两者。Erlang专为高吞吐量、弹性网络代理而构建。Haskell有不同的历史,但我听说它也有很好的网络堆栈。我本人是Erlang的super粉丝,您得到的大多数答案可能都有偏见。但最好的建议是亲自尝试。 关于

string - Erlang:将 TCP 发送的字符串转换为正确的形式,例如<<"SomeString">> 到 "SomeString"?

我有一个客户端和一个服务器,我使用客户端发送一个字符串,例如"Hello"它在服务器端显示为>.有没有办法简单地转换>返回"Hello"?我尝试使用,String=io_lib:format("~p",[StringIn]),lists:flatten(String),但这使得格式为>变成[[60,60,"\"Hello\"",62,62]]...顺便说下代码:-module(ss1).-compile(export_all).-import(lists,[reverse/1]).client()->{ok,Socket}=gen_tcp:connect("localhost",234

network-programming - Linux 网络堆栈是否在多核机器上并行运行?

我有一台运行Linux2.6.x的4核机器。该机器是单宿主机(即具有1个NIC)。在这台机器上,我运行4个进程(或者,1个进程中有4个线程),它们与网络上的4个不同主机进行网络I/O。问题:这4个网络I/O线程可以并行运行吗?我可以假设TCP/IP堆栈(包括NIC设备驱动程序)都是可以利用多个内核完全并行运行的并发代码吗?在它们的网络I/O的任何阶段,这些线程是否会阻止尝试获取TCP/IP堆栈中的某些共享资源,从而导致堆栈的一部分——以及位于顶部的4个应用程序级线程——部分中断顺序而不是完全并行? 最佳答案 是的,所有4个线程都会进

network-programming - 编程中以太网和 TCP/IP 协议(protocol)的区别?

如果一个套接字对以太网开放,那么它是否与TCP/IP中的套接字相同?在一些现有代码中,我发现它支持以太网协议(protocol),这是否意味着我可以使用TCP套接字客户端连接到此以太网套接字。我很困惑,请帮忙。提前致谢萨加尔 最佳答案 原始以太网套接字,例如SOCK_RAW,如果您不编写协议(protocol)处理程序(您不想这样做),则不能用于TCP通信。您应该知道如何在原始以太网模式下打开套接字时序列化/反序列化以太网帧。SOCK_STREAM是TCP的模式,互联网上充斥着TCP客户端/服务器代码的示例。

tcp - Erlang 套接字直到第二个 setopts {active,once} 才接收

首先,我想道歉,我提供了这么多信息,以尽可能清楚地说明问题所在。如果还有什么需要澄清的,请告诉我。(运行erlangR13B04,内核2.6.18-194,centos5.5)我有一个很奇怪的问题。我有以下代码来监听和处理套接字:%Optsusedtomakelistensocket-define(TCP_OPTS,[binary,{packet,raw},{nodelay,true},{reuseaddr,true},{active,false},{keepalive,true}]).%Acceptorloopwhichspawnsoffsockprocessorswhenconne

tcp - Erlang TCP 服务器处理

我开始学习Erlang,希望为实时多人游戏创建一个游戏服务器。目前,我正在尝试估计Erlang与Scala相比的工作量和头痛程度。因此,首先,我正在创建一个简单的Erlang服务器进程。我通过JesseFarmer找到了一个很好的教程我已经对其进行了修改以了解更多信息。我修改后的代码与他的echo服务器类似,除了它接受英文单词并简单地返回Lojban等价物。但是,只会选择通配符。这是代码:-module(translate).-export([listen/1]).-import(string).-define(TCP_OPTIONS,[binary,{packet,0},{activ

network-programming - 使用 DPDK 创建 tcp/ip 连接

我想知道是否有一种方法可以使用DPDK在用户空间建立TCP连接而无需从内存中复制数据包?我对此很陌生,我不知道从哪里开始,任何关于如何开始的建议都会有所帮助。我尝试使用谷歌搜索一些提示,或者如果有人问过,但我找不到很多资源。 最佳答案 DPDK是一组用于快速数据包处理的库和驱​​动程序。它没有开箱即用的TCP/IP堆栈。因此,要建立TCP连接,您需要在DPDK之上使用TCP/IP堆栈。栈有很多种,例如:F-Stackhttp://www.f-stack.org/顶级域名https://wiki.fd.io/view/TLDK还有很多

network-programming - 如何确保 UDP 服务器不会丢失传入数据?

有一个数据馈送服务器通过UDP接收来自各种客户端的馈送,因为客户端抽取数据的速度非常快,如果服务器花时间处理接收到的数据,接收缓冲区很容易变满,所以如果feed服务器有帮助只是多播它收到的所有数据到LAN上的其他服务器数据馈送服务器有第二个网卡连接到?其他每一个服务器只接收数据担心处理和离开其他数据到其他服务器。如果传入数据仍然到达太快了,有什么攻略确保不会丢失任何数据?谢谢。 最佳答案 一些可以尝试的策略包括确保接收进程在接收线程中做很少的事情,只需读取数据并将其发送到内部队列以供另一个线程处理-这应该会减少接收缓冲区填满的可能性