草庐IT

Erlang:Client ip-address, 向特定客户端发送数据包?

有没有办法在Erlang中为tcp连接获取客户端的ip地址?基于客户端连接到服务器的假设?我还想知道是否有必要向特定客户端发送特定数据包;就像服务器没有广播的情况一样,但是我需要ip地址来将数据包发送到特定的客户端,还是服务器只是为每个客户端使用一个引用(erlang:monitor)? 最佳答案 对于另一端的地址,inet:peername(Socket).然而,如果你想处理TCP对话中的每个客户端,一旦每个客户端连接,通常,你会产生单独的erlang进程来处理它,然后TransfertheSocketOwnership到产生的过

tcp - 在 Elixir 中设置 gen_tcp 的参数

我正在尝试使用Erlanggen_tcp在Elixir中通过TCP连接接受数据{:ok,socket}=:gen_tcp.connect("127.0.0.1",2000,[:binary,{:packet,0}])receive_data(Socket,[])但由于connect的错误参数,这无法正常工作。如何在Elixir中设置二进制值和数据包值?Here对参数含义进行了说明。但我需要支持在Elixir中设置参数。 最佳答案 查看gen_tcp的文档,您不能在连接上设置数据包选项。http://erlang.org/doc/ma

node.js - erlang 和 nodejs 之间通过 tcp 传递的数据

我需要通过tcp在nodejs和erlang进程之间传递数据。Erlang进程是一种api服务器,它从nodejs进程接收数据并进行一些处理。我想到了使用json作为数据结构,并且正在使用ejson来编码/解码消息。但是,在进行基准测试时,我发现解码速度非常慢。大约20k消息/秒。有没有更好或更快的方法通过tcp将数据发送到erlang。有没有办法让我可以在erlang中跳过这个解码过程。目前数据是这种类型的:{“事件”:“某事件”,"channel":"一些channel",erlang将使用事件和channel基于它进行一些处理。 最佳答案

tcp - Erlang get_tcp 数据包接收

我正在编写按照协议(protocol)运行的erlangtcp-server。每个数据包正好有4个字节大小。有一个特例数据包->.此数据包表明,服务器必须读取下一个PayloadLength字节的原始数据。当然,我可以接收原始数据流并在erlang代码中解析此协议(protocol)。但是我想知道,有没有办法使用内置的erlang包打包?当我的数据包以其长度开头时,我可以说[{packet,HeaderLength}]。有什么办法可以强制erlang自动将接收到的数据按4字节的chuks打包吗?UPD:我打算使用{active,once}模式。我也可以使用gen_tcp:recv(So

sockets - 将控制权从一个 gen_fsm 传递给另一个

我正在创建一个通用的Erlang服务器,它应该能够同时处理数百个客户端连接。为简单起见,我们假设服务器为每个客户端执行一些基本计算,例如,对客户端提供的每两个值进行加法或减法。作为起点,我使用thistutorial用于基本的TCP客户端-服务器交互。代表监督树的摘录:+----------------+|tcp_server_app|+--------+-------+|(one_for_one)+----------------+---------+||+-------+------++-------+--------+|tcp_listener|+tcp_client_sup|+

tcp - 关闭 OTP 主管拥有的 gen_tcp 监听套接字

一些教程,包括这个LearnYouSomeErlang一,显示OTP主管将打开并拥有一个TCP监听套接字并将其共享给将接受连接的多个工作人员的应用程序。我的问题是,如何在没有terminate/2回调函数的情况下关闭主管拥有的监听套接字? 最佳答案 套接字链接到拥有它的进程。如果该进程退出,套接字将自动关闭。(这适用于监听套接字和连接套接字。)(拥有套接字的进程就是创建它的进程,除非您已调用gen_tcp:controlling_process重新分配套接字的所有权。) 关于tcp-关闭

tcp - 二郎:gen_tcp:接受限制

我很感兴趣gen_tcp:accept函数的限制是什么?我的意思是什么是最大并发连接数?或者如何配置?(gen_tcp设置、ulimit或其他)get_tcp每秒可以接受多少连接? 最佳答案 最大并发连接数将取决于操作系统。在unix系统上,它将受到nfdsulimit的限制,以及内核配置为处理的最大连接数。每秒接受的连接数主要取决于您的应用程序代码。它必须及时为请求提供服务。待处理连接请求的最大数量由listen函数的backlog选项指定。大多数系统限制最大积压大小,在linux和freebsd上这个选项被命名为somaxcon

sockets - 在 erlang 中编写并行 TCP 服务器

“ProgrammingErlangSoftwareforaConcurrentWorld”说写一个并行的TCP服务器做这样的:start_parallel_server()->{ok,Listen}=gen_tcp:listen(...),spawn(fun()->par_connect(Listen)end).par_connect(Listen)->{ok,Socket}=gen_tcp:accept(Listen),spawn(fun()->par_connect(Listen)end),loop(Socket).loop(...)->%%handlerequesthere当s

java - Erlang 服务器,Java 客户端 - TCP 消息被拆分?

正如标题所说,我有一个用Erlang编写的服务器,一个用Java编写的客户端,它们通过TCP进行通信。我面临的问题是gen_tcp:recv显然不知道何时收到来自客户端的“完整”消息,因此将其“拆分”为多条消息。这是我正在做的一个例子(不完整的代码,试图只保留相关部分):代码二郎服务器-module(server).-export([start/1]).-define(TCP_OPTIONS,[list,{packet,0},{active,false},{reuseaddr,true}].start(Port)->{ok,ListenSocket}=gen_tcp:listen(Po

tcp - 在 erlang 中使用 tcp 发送原始二进制文件

我在erlang中有一个使用tcp的基本客户端服务器。如何将文件中的实际二进制数据发送给请求它的客户端?文件是如何分段发送的?我有这个代码{好的,套接字}=gen_tcp:connect({Ip},2345,[二进制,{数据包,4}]),这个{packet,4}是否处理双向发送的数据大小?此外,客户端如何接收数据然后对其进行处理?喜欢将其保存到文件吗?谢谢 最佳答案 是-{packet,4}将导致erlang在接收时需要一个4字节无符号大端整数长度值的数据包帧,并在发送每个数据包之前发出一个。您可以通过调用gen_tcp:send(