首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

后台开发-核心技术与应用实践--网络模型与网络调试

4种网络 IO 模型 为了解决网络 IO 中的问题,学者们提出了4种网络 IO 模型: 阻塞 IO 模型 非阻塞 IO 模型 多路 IO 复用模型 异步 IO 模型 在Linux下,默认情况下所有的 socket...在Linux 下,可以通过设置 socket 使 IO 变为非阻塞状态。当一个非阻塞的 socket执行read 操作时,流程如图所示: ?...在非阻塞式 IO 中,用户进程其实需要不断地主动询问 kernel 数据是否准备好。非阻塞的接口相比于阻塞型接口的显著差异在于被调用之后立即返回。...在非阻塞 IO中,虽然进程大部分时间都不会被阻塞,但是它仍然要求进程去主动检查,并且当数据准备完成以后,也需要进程主动地再次调用 recvfrom 来将数据拷贝到用户内存中。...DNS 服务器是否工作正常 ping 远程 IP 地址,这主要是检查本网或本机与外部的连接是否正常 tcpdump tcpdump 可以将网络中传送的数据包的“头”完全截获下来提供分析。

63630

Linux 性能调优之网络内核参数优化

较大的发送缓冲区可以提供更好的网络发送性能,尤其在高负载或延迟网络环境下。 这组内核参数的优化往往结合 BDP 来调整,等于或者大于 BDP 的值,关于 BDP,下文我们会讲。...较大的缓冲区可以提高网络性能,特别是在高负载或高延迟的网络环境中。但是,过大的缓冲区可能会导致内存占用增加或延迟问题。...]-[~] └─$ 最后一行可以看到,连接百度有 14 ms 的 RTT 时间,最后的输出结果中可以看到结果信息,假设带宽为 千兆带宽,1000Mbps,即 1Gb/s,假设我们使用的是 千兆网卡 rtt...在这里插入图片描述 根据 BPD 配置网络调优参数 下面为在 window 机器上 ping 谷歌 DNS ,可以看到 有 169 ms 的 RTT PS W:\Downloads> ping 8.8.8.8...]-[~] └─$cp /etc/sysctl.conf /root/ 配置调优后的内核参数 修改设置(socket max最大值等于刚才计算的BDP的值,默认值设置为最大值的一半: ┌──[root

2K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Unity【Multiplayer 多人在线】- Socket 通用服务端框架(七)、时间戳和心跳机制

    介绍 在阅读了罗培羽著作的Unity3D网络游戏实战一书后,博主综合自己的开发经验与考虑进行部分修改和调整,将通用的客户端网络模块和通用的服务端框架进行提取,形成专栏,介绍Socket网络编程,...协议,如果长时间没有收到,很大概率是客户端网络不通畅,此时便可以释放Socket资源。...心跳机制涉及PING和PONG两条协议,首先创建这两条协议的.proto文件,不需要定义任何字段,通过protoc.exe编译成.cs文件导入到项目中: 在客户端信息类Client中定义long...类型字段lastPingTime,用于记录上一次收到该客户端PING协议的时间,pingInterval用于表示客户端发送PING协议的时间间隔: using System.Net.Sockets;...: 当服务端很久没有收到ProtoPing时,可以认为连接已经断开,定义CheckPing方法判断是否超时: //Ping检查 private static void CheckPing() {

    56120

    Tomcat NIO(15)-长连接

    在上一篇文章里我们主要介绍了 tomcat nio 中 block poller 线程的阻塞与唤醒,当 tomcat io 线程读取请求实体数据不可读或者写入响应数据不可写的时候,就会注册事件到 block...block poller 线程负责注册并监测可读可写到原始 socket ,当可读可写的时候唤醒阻塞的线程,让其继续处理读写事件。在这里我们主要介绍 tomcat 中的长连接。...tomcat 数据的读写都在 io 线程中,根据以前文章 io 线程序列图如下: ?...除了以上在 tomcat io 线程中决定是否使用长连接之外,poller 线程也可以决定是否使用长连接。...当然对于 websocket 协议来说本身也有 ping/pong 定义来实现 keeplive 。 目前先写到这里,下一篇文章里我们继续介绍 tomcat 中的文件上传。

    1.7K30

    轮询以及webSocket与socket.io原理

    原理 介绍 首先,socket.io是一个库,一个基于engine.io协议(封装了webSocket协议)的库,在协议上创建了Engine.io引擎,socket.io则是该引擎的应用层框架 它相对比原生...在此就不多描述) 多路复用:Socket.io允许你在单个共享连接上创建多个namespace,这些namespace拥有单独的通信通道(room),也可设置单独的权限验证,但是可以共享原来的底层连接;...例如,如果您想创建一个只有授权用户才能加入的管理员频道 支持Room功能:room是在namespace下的,举个例子:namespace如同一片地区,room是这片地区中个房子,socket则是房子中的人...,namespace是可以在别的namespace中通信的,但是room只能在该spacename下的room之间进行通信,socket也只能收到该namespace的广播 socket.io连接过程...也是客户端的标识 pingInterval:ping的间隔时长 pingTimeout:判断连接超时的时长 当客户端收到响应之后,scoket.io会根据当前客户端环境是否支持Websocket。

    2K40

    php-fpm – 配置详解

    默认值: 0. daemonize = yes 后台执行fpm,默认值为yes,如果为了调试可以改为no。 在FPM中,可以使用不同的设置来运行多个进程池。 这些设置可以针对每个进程池单独设置。...,如果空闲进程小于此值,则创建新的子进程 pm.max_spare_servers ,保证空闲进程数最大值,如果空闲进程大于此值,此进行清理 对于专用服务器,pm可以设置为static。...默认值: none. ping.path = /ping FPM监控页面的ping网址. 如果没有设置, 则无法访问ping页面. 该页面用于外部检测FPM是否存活并且可以响应请求....ping.response = pong 用于定义ping请求的返回相应. 返回为 HTTP 200 的 text/plain 格式文本....request_slowlog_timeout = 10s 当一个请求该设置的超时时间后,就会将对应的PHP调用堆栈信息完整写入到慢日志中.

    1.6K20

    Ping 命令详解

    它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。 ping (Packet Internet Groper),因特网包探索器,用于测试网络连接量的程序。...-v tos :将”服务类型”字段设置为 tos 指定的值。 -r count :在”记录路由”字段中记录传出和返回数据包的路由。count 可以指定最少 1 台,最多 9 台计算机。...Ping本网网关或本网IP地址,这样的是为了检查硬件设备是否有问题,也可以检查本机与本地网络连接是否正常;(在非局域网中这一步骤可以忽略) E....5、用Ping命令来判断一条链路好坏 Ping这个命令除了可以检查网络的连通和检测故障以外,还有一个比较有趣的用途,那就是可以利用它的一些返回数据,来估算你跟某台主机之间的速度是多少字节每秒。...对方已关机,或者网络上根本没有这个地址:比如在上图中主机A中Ping 192.168.0.7,或者主机B关机了,在主机A中PING 192.168.0.5 都会得到超时的信息。 B.

    9.3K20

    应用业务偶尔报500错误的原因定位

    到公司后,加入调查故障原因的case中,联系公有云相关的技术一起排查,同时在zabbix proxy的中筛选出故障报警时刻的日志: 5388:20190328:233329.051 resuming Zabbix...:6700/health并无报错或超时现象,确认了开发者说异步IO,排除io的因素。...在分析nginx日志 和监控数据的过程中,发现nginx的user模块的访问日志在故障时间段出现499, 同时user模块所在的服务器的TCP监控指标close-wait在故障时间段大幅上升。...联系开发人员查看代码,将排查信息同步给开发方,同时jstack 将jvm的进程堆栈发给开发,最后定位到:开发者在调用第三方接口的时候,未增加超时,导致线程阻塞, 最终导致socket fd全部被微信接口请求耗尽...(和步骤8中的猜测吻合) 故障回溯: 微信的部分服务器网络丢包,导致我方user应用调用微信接口挂起,而该接口没有超时机制,内部其他的子系统调用该接口都有超时机制,故内部其他子系统调用该接口由于超时主动关闭

    2.2K30

    Python 实现Ping命令状态检测

    ping 是一种因特网包探索器,用于测试网络连接量的程序,Ping是工作在TCP/IP网络体系结构中应用层的一个服务命令,主要是向特定的目的主机发送 ICMP 请求报文,测试目的站是否可达及了解其有关状态...第一步封装MyPing类,在pycharm下面创建一个MyPing.py文件,详细代码备注如下。...return_time = int(times * 1000) return return_time else: return -1 实现模仿Windows中的...") 运行效果如下: 发送一条ping探测命令,send_ping()主要用于发送一个Ping包,后期我们可以实现一个主机存活探测器,主要调用代码如下: from MyPing import * if...= -1): print("已经连通, 抖动值: {}".format(ref)) 输出测试效果如下: 如上我们就可以实现对特定主机执行Ping检测了,接下来我们开始编写一个能够计算出特定范围内主机数的

    1.2K10

    WebSocket 基础与应用系列(二)—— Engine.IO 原理了解

    1、WebSocket、 Engine.IO、 Socket.IO 之间的关系 WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。...在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。...升级的时候,客户端会做如下动作: 保证要发送的队列中是空的 把当前的传输通道设为只读 使用另外的 transport 建立新的连接 如果新传输通道建立成功,关掉第一条传输通道 可以在浏览器抓包看到如下网络连接...: 允许升级的传输通道 (Array of String) pingTimeout: 服务端配置的 ping 超时时间,发送给客户端,客户端用来检测服务端是否还正常响应 (Number) pingInterval...在浏览器中 message 中的能抓到的数据包,属于 WebSocket 协议中的 message 类型数据,WebSocket 的 PING, PONG 是和 message 类型是并列的,因此浏览器中的

    1.8K21

    好难!腾讯面试体验已结束。。。

    使用共享数据库或缓存:将对象存储在共享数据库(如 MySQL、PostgreSQL)或共享缓存(如 Redis)中,让不同的 JVM 可以访问这些共享数据。...容易被攻击:Java 序列化是不安全的,我们知道对象是通过在 ObjectInputStream 上调用 readObject() 方法进行反序列化的,这个方法其实是一个神奇的构造器,它可以将类路径上几乎所有实现了...这也就意味着,在反序列化字节流的过程中,该方法可以执行任意类型的代码,这是非常危险的。 序列化后的流太大:序列化后的二进制流大小能体现序列化的性能。...select 使用固定长度的 BitsMap,表示文件描述符集合,而且所支持的文件描述符的个数是有限制的,在 Linux 系统中,由内核中的 FD_SETSIZE 限制, 默认最大值为 1024,只能监听...在 RFC 文档中,并没有明确由谁来关闭连接,请求和响应的双方都可以主动关闭 TCP 连接。

    23310

    MySQL 连接怎么保活?

    设置最长等待时间之后,接下来就是安静的等待了,执行等待操作的方法是 vio_io_wait(): int vio_socket_io_wait(Vio *vio, enum enum_vio_io_event...所以,ping 命令不但可以用于数据库连接探活,还可以用于保活。...在MySQL 源码的实现中,体现了 2 点区别: 区别 1:ping 是命令,我们只能通过 MySQL 提供的 API,或 mysqladmin 这样的工具发送 ping 命令给 MySQL 服务端。...区别 2:ping 的执行流程比 select 更短,效率更高,通过对比两者的调用栈,我们能更直观的看到这一点。 两种方式都会响应客户端请求,后面给出的调用栈中,把这部分省略了。...经过前面的介绍,我们就可以得出结论了: ping 命令的执行效率比 select 语句高,对于追求极致性能的应用来说,使用 ping 命令给数据库连接保活是更好的方式。 ----

    5K10

    PHP7中php.ini、php-fpm和www.conf 配置

    pid = run/php-fpm.pid pid设置,默认在安装目录中的var/run/php-fpm.pid,建议开启 error_log = log/php-fpm.log 错误日志,默认在安装目录中的...daemonize = yes 后台执行fpm,默认值为yes,如果为了调试可以改为no。在FPM中,可以使用不同的设置来运行多个进程池。 这些设置可以针对每个进程池单独设置。...该页面用于外部检测FPM是否存活并且可以响应请求. 请注意必须以斜线开头 (/)。 ping.response = pong 用于定义ping请求的返回相应....request_slowlog_timeout = 10s 当一个请求该设置的超时时间后,就会将对应的PHP调用堆栈信息完整写入到慢日志中....一般在项目中,我们多多少少都会用到一些 PHP 的第三方库,这些第三方库经常存在内存泄漏问题,如果不定期重启 PHP-CGI 进程,势必造成内存使用量不断增长。

    1.6K30

    基础巩固——长连接 、短连接、心跳机制与断线重连

    长连接的优点 长连接可以省去较多的TCP建立和关闭的操作,减少网络阻塞的影响, 当发生错误时,可以在不关闭连接的情况下进行提示, 减少CPU及内存的使用,因为不需要经常的建立及关闭连接。...系统默认是设置的2小时的心跳频率。但是它检查不到机器断电、网线拔出、防火墙这些断线。 而且逻辑层处理断线可能也不是那么好处理。一般,如果只是用于保活还是可以的。 为什么需要心跳机制?...因为网络的不可靠性, 有可能在 TCP 保持长连接的过程中, 由于某些突发情况, 例如网线被拔出, 突然掉电等, 会造成服务器和客户端的连接中断....2.在客户端中的ChannelPipeline中加入IdleStateHandler,设置写事件触发事件为5s. 3.客户端超过5s未写数据,触发写事件,向服务端发送心跳包, 4.同样,服务端要对心跳包做出响应...; import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NioSocketChannel;

    4.2K11

    网络编程之长连接 、短连接、心跳机制与断线重连

    长连接的优点 长连接可以省去较多的TCP建立和关闭的操作,减少网络阻塞的影响, 当发生错误时,可以在不关闭连接的情况下进行提示, 减少CPU及内存的使用,因为不需要经常的建立及关闭连接。...系统默认是设置的2小时的心跳频率。但是它检查不到机器断电、网线拔出、防火墙这些断线。 而且逻辑层处理断线可能也不是那么好处理。一般,如果只是用于保活还是可以的。 为什么需要心跳机制?...在应用层上实现自定义的心跳机制. 虽然在 TCP 协议层面上, 提供了 keepalive 保活机制, 但是使用它有几个缺点: 它不是 TCP 的标准协议, 并且是默认关闭的....2.在客户端中的ChannelPipeline中加入IdleStateHandler,设置写事件触发事件为5s. 3.客户端超过5s未写数据,触发写事件,向服务端发送心跳包, 4.同样,服务端要对心跳包做出响应...; import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NioSocketChannel;

    1.6K30

    Linux系统之ping命令的基本使用

    一、ping命令介绍 ping 命令是一个网络工具,用于测试主机之间的连通性。...二、ping命令的使用帮助 2.1 ping命令的帮助信息 在命令行终端中,我们使用-h选项查询ping命令的基本帮助信息。...三、ping命令的基本使用 3.1测试与特定IP地址或域名的连通性 例如我们需要检查本机与 8.8.8.8 的连接状态,可以执行: ping 8.8.8.8 例如我们需要检查本机与一个域名如 www.baidu.com...,则可以使用以下命令: ping www.baidu.com 我们可以按 Ctrl+C 来中断ping进程,并查看最终的统计信息。...ping -c 4 -s 1024 8.8.8.8 3.5 仅显示摘要信息 如果我们只需要查看统计结果而不关心每个数据包的具体信息,可以使用 -q 选项。

    14800

    聊聊TCP连接耗时的那些事儿

    经过日常工作的思考之后,我更想弄明白的是,开销到底多大。一条TCP连接的建立需要耗时延迟多少,是多少毫秒,还是多少微秒?能不能有一个哪怕是粗略的量化估计?...在接收方网卡将数据包DMA到RingBuffer后,内核经过硬中断、软中断等机制来处理(如果发送的是用户数据的话,最后会发送到socket的接收队列中,并唤醒用户进程)。...既然后果有可能这么严重,那么我们如何查看我们手头的服务是否有因为半/全连接队列满的情况发生呢?在客户端,可以抓包查看是否有SYN的TCP Retransmission。...原来有少部分握手耗时3s+,原因是半连接队列满了导致客户端等待超时后进行了SYN的重传。 我们又重新改成每500个连接,sleep 1秒。嗯好,终于没有卡的了(或者也可以加大连接队列长度)。...最后我们再思考一下,如果我们把服务器部署在北京,给纽约的用户访问可行吗? 前面的我们同机房也好,跨机房也好,电信号传输的耗时基本可以忽略(因为物理距离很近),网络延迟基本上是转发设备占用的耗时。

    1.6K50

    干货 | 大语言模型插件功能在携程的python实践

    由此可以看出Function Calling(函数调用)的本质就是利用大语言模型的文字分析能力,在提供的一系列函数中,找出能够回答问题的最合适的函数,函数内部的具体逻辑则交给开发者自己实现,而不是大语言模型实现...Socket.IO也可以实现客户端和服务段之间双向通信。但与websocket不同的是,socketIO是一个第三方库,他具有websocket的基本功能,同时也增强了一些的功能。...比如: 兼容性:WebSocket是HTML5标准中的一部分,需要浏览器支持HTML5才能使用,而Socket.IO是基于WebSocket协议的封装,可以在不支持WebSocket的浏览器上使用 API...在连接异常时会直接断开连接,而Socket.IO的心跳机制会尝试重新连接,提高了连接的稳定性 支持的协议:WebSocket只支持单一的协议,而Socket.IO支持多种协议,包括WebSocket、Flash...因此WebSocket客户端将无法成功连接到Socket.IO服务器,而Socket.IO客户端也将无法连接到普通WebSocket服务器。

    43510
    领券