草庐IT

Flask-Sockets

全部标签

sockets - 是重用连接更好,还是为了频繁发送数据而更新连接?

我有一个TCP服务器应用程序,它监听来自客户端的连接,这些客户端以相当小的间隔(大约20秒)频繁发送“心跳”数据包。这样的客户有几百个,最多1000个。它以前已经实现(不是由我实现),以便为每个心跳建立一个新的TCP连接,然后关闭它。在我看来,保持连接打开并重用它进行通信会更好,但我不确定。重新建立连接是在浪费时间和带宽,而保持几百个打开的连接(在服务器的情况下)不是问题,或者相反,不关闭它们是对资源的巨大浪费吗? 最佳答案 最佳选择取决于您拥有的内存量、连接延迟和心跳频率:每个TCP连接需要1xRTT时间来建立,因此每次创建一个新

Java TCP-Sockets 传输大于 4gb 的文件

这个问题在这里已经有了答案:Javamultiplefiletransferoversocket(3个答案)关闭4年前。我正在尝试使用JavaSocketsAPI传输大于4gb的文件。我已经通过InputStreams读取它并通过OutputStreams写入它。然而,在Wireshark中分析传输的数据包,我意识到TCP数据包的序列号随着数据包的字节长度增加,似乎是1440字节。这导致当我尝试发送大于4gb的文件时,超过了TCP的Sequence-Number字段的总大小,导致很多错误包,但在Java中没有错误。我的传输代码目前如下所示:DataOutputStreamfileTra

sockets - Android 中实时多人游戏的套接字编程与 WebSocket 对比

我正在使用Android(java)开发实时多人游戏,我将双向连接的选择范围缩小到WebSocket和Socket编程我的要求是:快速react高频发送和接收小负载稳定的连接安全连接图像和音频传输在应用聊天中根据这些要求,我想知道哪个更合适。谢谢。 最佳答案 WebSocket是一个常规的TCP套接字连接:主要是它在Web浏览器中受支持,因此可以从Javascript使用它们。作为HTTP连接启动,允许它轻松地跨越代理和防火墙,并利用HTTP机制,如cookie和OriginHTTPheader等。因此,例如,Websocket连接

sockets - 如何模拟 boost::asio::write 超时

我正在尝试用超时模拟boost::asio::write。或者你可以说,我正在尝试使用带有超时的boost::asio::async_write。如我所见,boost::asio::write会阻塞,直到所有数据都在另一侧被写入和读取。这种功能当然需要超时。那么,通读thissimpleanswerhere由RobertHegner演示如何使用timeout执行boost::asio::async_read,我正在尝试采用相同的逻辑通过这样做来写:size_twrite_data_with_time_out(){longtime_out_secs=2;boost::optionalti

sockets - 当内部缓冲区填满时 TCP 会发生什么

假设我们有以下TCP套接字设置,其中客户端向服务器发送任意数据。将以下内容视为伪代码。defclient():whileTrue:data=source.get_data()client_socket.send(data)服务器读取数据并使用它来做某事...defserver():whileTrue:data+=socket.recv(4096)parsed_data=parse_data(data)cpu_intensive_task(parsed_data)让我们假设客户端发送数据的速度比服务器处理的速度快得多。内部网络缓冲区可以填满吗?我假设答案是肯定的......如果是这样,那

sockets - Linux 上的 ZeroMQ 和 TCP 重传

我无法理解在TCP必须尝试重新传输消息的情况下哪些套接字类型会受到负面影响。我们有一个分布式系统,它为内部进程以及外部设备和应用程序使用进程内和TCP连接的组合。我担心的是,如果有大量流量导致延迟和丢包,则TCP重传将导致系统延迟。我想避免的是一个应用程序在队列中编译消息等待发送(通过单个ZeroMQTCP套接字),因为TCP强制套接字重复重新传输从未发送确认的消息。这是使用ZeroMQ时可能发生的问题吗?目前我在Linux操作系统上使用PUSH/PULL。或者这不是一个问题,如果不是,为什么?来自外部设备/应用程序的消息不提供陈旧数据至关重要。 最佳答案

sockets - 如何控制 Scala 远程参与者的 TCP_NODELAY 设置?

我正在使用Scala的远程参与者,但往返时间(即使是一条微不足道的消息)是80毫秒,大概是由于底层套接字没有禁用TCP/IPNagle算法(也称为TCP_NODELAY),或者至少这是一些具有JavaRMI经验的人告诉我的。我在客户端中为获取到远程参与者的链接所做的一切就是valserver=select(Node("127.0.0.1",12111),'server)有什么方法可以获取底层套接字并对其调用java.net.Socket.setTcpNoDelay()吗? 最佳答案 如果您需要在不修改Scala源代码的情况下在底层S

sockets - 使用 J2ME 进行套接字编程

如何使用J2ME连接到TcpServer(使用ip和端口)?我想向服务器发送请求并获得响应! 最佳答案 我的问题用这段代码解决了:importjavax.microedition.midlet.*;importjavax.microedition.lcdui.*;importjava.io.*;importjavax.microedition.io.*;StreamConnectionconnection=(StreamConnection)Connector.open("socket://IP:Port");PrintStream

sockets - 服务器不发送 SYN+ACK

我有一个客户端和一个服务器。它们在同一台机器上运行时工作正常,但是当我尝试从网络外部连接客户端时,我的服务器不会发送SYN+ACK数据包来响应SYN数据包。使用Wireshark,我可以看到来自客户端的SYN数据包,但我没有看到发送到客户端的SYN+ACK数据包。我找到了一些解决方案,说要关闭TCP窗口缩放和TCP时间戳,但这对我不起作用。另外,在服务器端使用netstat-ln命令,我可以看到tcp000.0.0.0:550000.0.0.0:*LISTEN这是服务器端的Wireshark输出:这是我的IP表: 最佳答案 您必须评

sockets - TCP/IP 套接字是原子的吗?

据我了解,如果写入的数据量很小,则对TCP/IP套接字的写入将是原子的。所谓原子,我的意思是接收方将接收所有数据或不接收任何数据。但是,如果写入的数据量很大,它就不是原子的。我对么?如果是这样,什么算大?谢谢,鲍勃 最佳答案 没有。TCP是一种字节流协议(protocol)。没有消息,没有类似数据报的行为。 关于sockets-TCP/IP套接字是原子的吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.c