问题标签 [gen-tcp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
867 浏览

erlang - erlang gen_tcp:recv 块

你好我有这种情况:

我使用gen_tcp:recv(Sock,0),但是来自服务器的消息没有特定的结束模式,所以有什么方法可以防止客户端阻塞 recv?

来自文档:

0 投票
2 回答
201 浏览

erlang - 从 gen_tcp 套接字接收特定数量的数据

我有以下代码使用 gen_tcp 套接字,它应该使用{active, true}一些总是大小为 5 的二进制命令来接收(例如Command = <<"hello">>

但是,如果我尝试像这样作为客户端连接:

我在接收部分:

所以我想我的错误在于模式匹配......但是在哪里?

0 投票
1 回答
95 浏览

ssl - 进程收到套接字关闭消息前多长时间

假设您有一个正在处理套接字 (gen_tcp/ssl) 的 Erlang 进程,并且对等方关闭了连接。

该过程需要多长时间才能收到如下消息:

或者

这个时间量是在 Erlang 代码中的某个地方指定的还是与系统有关?

0 投票
1 回答
737 浏览

erlang - 通过套接字发送确切的字节数

我已经在 Erlang 中使用 gen_tcp 阅读过,通过套接字发送的数据可以聚合在一个流中。如何强制套接字准确发送特定数量的字节?

0 投票
1 回答
1299 浏览

sockets - 正在使用 Erlang 的 gen_tcp 一种可扩展的方式来构建高流量套接字服务器

我正在尝试学习 Erlang 来做一些简单但可扩展的网络编程。我基本上想编写一个程序来完成互联网骨干上的服务器所做的事情——但规模较小。我想尝试建立一个带有 Web 可访问服务器的 Intranet,这些服务器将充当 Intranet [sic] 的网关,并将数据路由到连接的客户端和/或其他网关。

高流量来自这样一个事实,即数据不仅会从客户端流向网关再到客户端,而且可能必须绕过几个网关才能到达目的地(例如数据在互联网上的传输方式)。这意味着网关不仅要处理来自其客户端的流量,还要处理来自其他网关客户端的流量。

我认为这会导致异常高的流量,即使对于中等数量的客户端和网关也是如此。

来自 Python 以及其他脚本语言的背景,我习惯于挖掘自定义模块来解决我的问题。我知道 Erlang 是为高流量网络编程而设计的,但我能找到的关于这类东西的库/模块只有 gen_tcp。

这是否意味着 Erlang 已经针对这种事情进行了如此优化,以至于您可以使用其最基本的模块启动它并期望它能够很好地扩展?

0 投票
1 回答
534 浏览

erlang - Erlang gen_tcp 延迟发送

我将以下代码作为 Erlang Web 服务器的一部分,用于许多长期并发连接。

尽管我添加了delay_sendandnodelay选项,但它似乎在缓冲数据,因此在发送更大的数据块或服务器被终止之前不会发送小块数据。为什么会这样,我怎样才能强制它立即发送所有数据?

0 投票
2 回答
271 浏览

erlang - gen_tcp:recv 收到的二进制文件是什么?

无论我设置packet为 0 还是 1、2、4,总是得到以下信息:

gen_tcp:send(S1,term_to_binary("1"))。输出 <<131,107,0,1,49>>
gen_tcp:send(S1,term_to_binary(a))。输出 <<131,100,0,1,97>>
gen_tcp:send(S1,term_to_binary("abcd"))。输出 <<131,107,0,4,97,98,99,100>>
gen_tcp:send(S1,term_to_binary(1))。输出 <<131,97,1>>

我的问题是:
1. <<131,107>> 是什么?
2. 发送 1 而不是 "1" 得到的二进制没有包长度,比如 '131,107,0,1',为什么?

0 投票
1 回答
824 浏览

web-services - gen_tcp 收到极高的 CPU

抱歉,我是 Erlang 新手,可能会提出愚蠢的问题。但请帮我解决这个问题。

我已经编写了一个 Erlang 服务器来用 Node.js 替换我正在使用的服务器,它吞噬了我所有的记忆,我祈祷 Erlang 可以成为一种出路。服务器在单元测试和内部测试中正常工作,但在压力测试中面临高 CPU 使用率。

修整下来后,我发现 CPU 突发是由于客户端的 TCP 接收造成的。

我尝试在函数开始时让进程休眠 10 小时(以防止它调用接收),CPU 根本没有爆裂。因此我得出结论,CPU的突发是由于TCP接收。(如果我犯了任何错误,请纠正我)

以下是有关我的压力测试的信息:

  1. 启动 Erlang 服务器: erl +zdbbl 2097151 -K true +A 128 +P
  2. 5000000 将 5000 个客户端连接到每个连接的 Erlang 服务器
  3. 客户端每 1 分钟向服务器发送一个 2 字节的数据。
  4. 连接完成,(即每分钟只执行 2 个字节的数据),CPU 突发到 ~30%sy(从“顶部”)

我正在为 Erlang 服务器使用 Amazon Linux AMI(大型实例,64 位)。爆裂是因为linux吗?因为我不知道系统将如何用完 CPU。或者是我糟糕的代码的问题?(我相信是这样...)

在实际情况下,我们的服务器不仅可以接收乒乓球,还可以接收消息,这需要更多的负载……这只是第一步……

数以百万计的感谢任何可以拯救我的人。

安妮塔~*

~~~~~~~~~~~~~~~~~~~~~~~

大实例信息(供参考):

  • 7.5 GB 内存
  • 4 个 EC2 计算单元(2 个虚拟内核,每个内核有 2 个 EC2 计算单元)
  • 850 GB 实例存储
  • 64位平台
  • I/O 性能:高
0 投票
2 回答
1264 浏览

file - Erlang:发送文件和文件名

我很高兴发送一个文件,它是文件名。服务器选项:

那是接收器循环:

我发送文件:

当我发送文件和文件名时

二进制数据具有可变结构。

谢谢大家!

0 投票
1 回答
1427 浏览

erlang - Erlang:gen_tcp:recv() 没有收到客户端发送的数据包?

我修改了此服务器以使用gen_tcp:recv以将数据包的字节数限制为 50。我注释掉了该行inet:setopts(Socket, [{active, once}]),,因为gen_tcp:recv应该是{active,false}. 这是客户端 erl shell

这是服务器端 erl shell

{tcp_closed, Socket}我还想知道如果gen_tcp:recv没有创建套接字,我怎么知道套接字是否以返回值关闭?