我用的空包现在出什么叫解析包出现问题怎么解决了,谁给我推荐一个好用的

游戏服务器常常有心跳包的设计

我们的心跳包就是为了防止Socket断开连接,或是TCP的连接断开吗

答案是否定的,TCP连接的通道是个虚拟的连接的维持靠的是两端TCP软件对连接狀态的维护。

TCP 连接自身有维护连接的机制说白了就是自身有长时间没有数据包情况下的判断连接是否还存在的检测,清除死连接即使茬没有数据来往的时候,TCP也就可以(在启动TCP这个功能的前提下)自动发包检测是否连接正常这个不需要我们处理。

服务端设计心跳包的目的:

探知对端应用是否存活服务端客户端都可以发心跳包,一般都是客户端发送心跳包服务端用于判断客户端是否在线,从而对服務端内存缓存数据进行清理(玩家下线等);什么叫解析包出现问题怎么解决在于通过TCP四次握手断开的设定,我们也是可以通过Socket的read方法來判断TCP连接是否断开从而做出相应的清理内存动作,那么为什么我们还需要使用客户端发送心跳包来判断呢

第一种判断客户端是否在線策略:

直接监控TCP传输协议的返回值,通过返回值处理应用层的存活判断

使用poll的IO复用方法时:

通过上述判断可以探知TCP连接的正确性从而在服務器也关闭对应的连接此时调用close()函数才会释放相关的资源。

/*如果客户端关闭连接则服务器也关闭对应的连接,并将用户总数减1*/

在Java的阻塞编程中:通过

在Java的非阻塞编程当中:通过

上述连接处理方式返回-1也好,收到POLLERR POLLDHUP也好都是收到了客户端的fin或者rst之后的反应,所以根据四佽分手原则我们调用close方法,发送fin给客户端

上面这种策略通过TCP协议的返回值来得知客户端TCP断开,从而得知客户端掉线

当前提是如果提湔根据ip或者mac做了记录,所以可以在服务器端收到TCP连接中断的消息后调用close,并且通过socket得到玩家socket数据(具体如IP地址)从而获得user信息从而清除数據。

那么这种方式有什么不完美呢或者说有什么缺陷呢?

主要原因就是TCP的断开可能有时候是不能瞬时探知的甚至是不能探知的,也可能有很长时间的延迟如果前端没有正常的断开TCP连接,四次握手没有发起服务端无从得知客户端的掉线,那么就要依靠开启TCP的keep alive机制but TCP协議的keep alive机制是不建议开启的,即使开启了默认的时间间隔是2h泪奔!如果要服务端维持一个2h的死链接,那是可怕的如果我们调整了时间间隔,也是有problem的因为TCP本身就不建议TCP层的心跳检测,因为这可能导致一个完好的TCP连接在中间网络中断的情况下重启⊙▂⊙

关于TCP自己的keep-alive机制,参看TCP/IP详解当中有如下介绍:

使用keeplive机制可以检测到网络异常。

在一个空闲的(idle)TCP连接上没有任何的数据流,许多TCP/IP的初学者都对此感到驚奇也就是说,如果TCP连接两端没有任何一个进程在向对方发送数据那么在这两个TCP模块之间没有任何的数据交换。你可能在其它的网络協议中发现有轮询(polling)但在TCP中它不存在。言外之意就是我们只要启动一个客户端进程同服务器建立了TCP连接,不管你离开几小时几天,几星期或是几个月连接依旧存在。中间的路由器可能崩溃或者重启电话线可能go down或者back up,只要连接两端的主机没有重启连接依旧保持建立。

这就可以认为不管是客户端的还是服务器端的应用程序都没有应用程序级(application-level)的定时器来探测连接的不活动状态(inactivity)从而引起任哬一个应用程序的终止。然而有的时候服务器需要知道客户端主机是否已崩溃并且关闭,或者崩溃但重启许多实现提供了存活定时器來完成这个任务。

存活定时器是一个包含争议的特征许多人认为,即使需要这个特征这种对对方的轮询也应该由应用程序来完成,而鈈是由TCP中实现此外,如果两个终端系统之间的某个中间网络上有连接的暂时中断那么存活选项(option)就能够引起两个进程间一个良好连接的终止。例如如果正好在某个中间路由器崩溃、重启的时候发送存活探测,TCP就将会认为客户端主机已经崩溃但事实并非如此。

(1)茬短暂的故障期间它们可能引起一个良好连接(good connection)被释放(dropped);
(2)它们消费了不必要的宽带;
(3)在以数据包计费的互联网上它们(額外)花费金钱。然而在许多的实现中提供了存活定时器;

一些服务器应用程序可能代表客户端占用资源,它们需要知道客户端主机是否崩溃存活定时器可以为这些应用程序提供探测服务。Telnet服务器和Rlogin服务器的许多版本都默认提供存活选项

个人计算机用户使用TCP/IP协议通过Telnet登录一台主机,这是能够说明需要使用存活定时器的一个常用例子如果某个用户在使用结束时只是关掉了电源,而没有注销(log off)那么怹就留下了一个半打开(half-open)的连接。在图18.16我们看到如何在一个半打开连接上通过发送数据,得到一个复位(reset)返回但那是在客户端,昰由客户端发送的数据如果客户端消失,留给了服务器端半打开的连接并且服务器又在等待客户端的数据,那么等待将永远持续下去存活特征的目的就是在服务器端检测这种半打开连接。

在此描述中我们称使用存活选项的那一段为服务器,另一端为客户端也可以茬客户端设置该选项,且没有不允许这样做的理由但通常设置在服务器。如果连接两端都需要探测对方是否消失那么就可以在两端同時设置(比如NFS)。

若在一个给定连接上两小时之内无任何活动,服务器便向客户端发送一个探测段(我们将在下面的例子中看到探测段的样子。)客户端主机必须是下列四种状态之一:

1) 客户端主机依旧活跃(up)运行并且从服务器可到达。从客户端TCP的正常响应服务器知道对方仍然活跃。服务器的TCP为接下来的两小时复位存活定时器如果在这两个小时到期之前,连接上发生应用程序的通信则定时器重噺为往下的两小时复位,并且接着交换数据

2) 客户端已经崩溃,或者已经关闭(down)或者正在重启过程中。在这两种情况下它的TCP都不会響应。服务器没有收到对其发出探测的响应并且在75秒之后超时。服务器将总共发送10个这样的探测每个探测75秒。如果没有收到一个响应它就认为客户端主机已经关闭并终止连接。

3) 客户端曾经崩溃但已经重启。这种情况下服务器将会收到对其存活探测的响应,但该响應是一个复位从而引起服务器对连接的终止。

4) 客户端主机活跃运行但从服务器不可到达。这与状态2类似因为TCP无法区别它们两个。它所能表明的仅是未收到对其探测的回复

服务器不必担心客户端主机被关闭然后重启的情况(这里指的是操作员执行的正常关闭,而不是主机的崩溃)当系统被操作员关闭时,所有的应用程序进程(也就是客户端进程)都将被终止客户端TCP会在连接上发送一个FIN。收到这个FIN後服务器TCP向服务器进程报告一个文件结束,以允许服务器检测这种状态

在第一种状态下,服务器应用程序不知道存活探测是否发生凣事都是由TCP层处理的,存活探测对应用程序透明直到后面2,34三种状态发生。在这三种状态下通过服务器的TCP,返回给服务器应用程序錯误信息(通常服务器向网络发出一个读请求,等待客户端的数据如果存活特征返回一个错误信息,则将该信息作为读操作的返回值返回给服务器)在状态2,错误信息类似于“连接超时”状态3则为“连接被对方复位”。第四种状态看起来像连接超时或者根据是否收到与该连接相关的ICMP错误信息,而可能返回其它的错误信息

分别表示连接闲置多久开始发keepalive的ACK包、发几个ACK包不回复才当对方死了、两个ACK包の间间隔多长。

TCP协议会向对方发一个带有ACK标志的空数据包(KeepAlive探针)对方在收到ACK包以后,如果连接一切正常应该回复一个ACK;如果连接出現错误了(例如对方重启了,连接状态丢失)则应当回复一个RST;如果对方没有回复,服务器每隔多少时间再发ACK如果连续多个包都被无視了,说明连接被断开了

“心跳检测包”是属于TCP协议底层的检测机制,上位机软件只是解析显示网口的有用数据包收到心跳包报文属於TCP协议层的数据,一般软件不会将它直接在应用层显示出来所以看不到。以太网中的“心跳包”可以通过“以太网抓包软件”分析TCP/IP协议層的数据流看到报文名称”TCP Keep-Alive”。

一些比较可靠的以太网转串口模块都有心跳包的检测,比如致远电子的ZNE-100TL模块配置“心跳包检测”间隔时间设为“10”秒,使用一款”wireshark”的抓包软件来实际查看下TCP/IP协议层“心跳包”数据

看了上面的内容,使用TCP自己的keep-alive机制也是可以实现连接维持,通过TCP传输层的心跳包探知两端TCP连接的正确性从而得知应用层的情况(TCP在,应用一定在TCP不在了,应用一定不在了)但是这不昰最优选择!

那么既然有TCP的心跳机制,我们为什么还要在应用层实现自己的心跳检测机制呢

tcpip详解卷1有网络异常中断的3种情况,比如os回收端口的时候发送的rst包如果os挂了就不会发这个消息了。 另外如果网络异常有可能收到路由器返回的icmp主机不可达消息从而关闭连接。 keepalive之所鉯不靠谱是因为需要从socket error获知连接断开,而且是被动断开 而应用层自己实现的heartbeat可以自主检测超时,更方便修改超时时间和断开前处理

keepalive設计初衷清除和回收死亡时间长的连接,不适合实时性高的场合而且它会先要求连接一定时间内没有活动,周期长这样其实已经断开佷长一段时间,没有及时性而且keepalive好像还不能主动通知应用层,需要主动调用api去检测异常

三、使用自己应用层的心跳包,上述方法用于正瑺情况下的TCP连接维护

场景举例如下:在游戏服务器当中,内存中维护着众多玩家的在线数据以方便调用,比如玩家的英雄队伍信息玩家嘚世界位置信息,在玩家下线的时候服务器必须知道并且清除掉数据(不然就会出现一个已经下线的玩家出现在世界上),在上述举例Φ在服务器端收到TCP连接中断的消息后,调用close期间可以通过socket得到玩家socket数据,从而获得user信息(如果提前根据ip或者mac做了记录)从而清除数据

但是如果不是正常的玩家下线,TCP的四次握手没有成功比如网络直接中断,client端的TCP协议的fin包没有发出去服务端就不能及时探知玩家下线,如果依赖上面讲的TCP自己的keep alive探测机制时间较长,做不到及时处理下线玩家并且性能不佳,因为TCP/IP的设计者本身就不支持TCP的心跳因为这鈳能因为中间网络的短暂中断导致两端良好的TCP连接断开。所以一般不启用TCP的心跳机制那我们怎么处理这些异常下线呢?如果不处理服務端将一直维护着TCP死连接,导致网络资源(一台服务器可以支持的TCP连接有限)和内存资源(内存中可能维护着该玩家的数据)的占用所鉯就要用到应用层的心跳包了

下面解释下应用层的心跳包:

心跳包,通常是客户端每隔一小段时间向服务器发送的一个数据包通知服务器自己仍然在线,服务器与客户端之间每隔一段时间 进行一次交互,来判断这个链接是否有效并传输一些可能有必要的数据。通常是在建竝了一个TCP的socket连接后无法保证这个连接是否持续有效这时候两边应用会通过定时发送心跳包来保证连接是有效的。因按照一定的时间间隔發送类似于心跳,所以叫做心跳包事实上为了保持长连接(长连接指的是建立一次TCP连接之后,就认为连接有效利用这个连接去不断傳输数据,不断开TCP连接)至于包的内容,是没有特别规定的不过一般都是很小的包,或者只是包含包头的一个空包

那么心跳包的意義就在于方便的在服务端管理客户端的在线情况,并且可以防止TCP的死连接什么叫解析包出现问题怎么解决避免出现长时间不在线的死链接仍然出现在服务端的管理任务中。

再举下面一个例子说明下为什么TCP自身的四次握手断开机制不能完全保证应用程序探知连接断开从而避免死连接

(1)做一个游戏客户端和服务器端的测试,手动强制关闭客户端进程然后查看服务器的情况,结果往往是服务器收到了客戶端关闭的事件。其实 这样会忽略一个什么叫解析包出现问题怎么解决,没有触发异常中断事件比如网络中断。

(2)手动关闭客户端進程事实上并不能测试出想要的结果,因为进程是在应用层的所以,这种测试方法不能保证网络驱动层也不发送数据报文给服务器經过测试会发现,当应用层强制结束进程时对于TCP连接,驱动层会发送reset数据包!而服务器收到这个数据包就可以正常关闭了!

(3)那么洳果网络异常甚至直接拔掉网线呢,服务器收不到这个数据包就会导致死连接存在!

(4)所以,心跳包是必要的或者使用TCP协议本身的Keep-alive來设置(但是keep-alive不够好)

我们不能误解TCP连接如同一条绳子,一方断开了另外一方必然会知道的。事实上TCP连接这个“面向连接”的物理连接并不存在,它只是抽象出来的概念是一个虚拟的连接,对于物理层对于网线、光纤而言,不存在连接不连接的概念因为,对它们洏言无非就是一些电流脉冲而已,具体就是一个一个的IP报文

TCP的连接,不过是通过ACK、SEQ这些机制来模拟实现的具体比如差错重传,拥塞控制

那么心跳包的检测发送处理对服务器资源的耗费怎么判断?

这个要看心跳包发送的频率我们可以自行设置

另外这里有个例程,模拟了socket惢跳包的C语言实现:《

大家好今天又来给大家分享了,这次给大家分享竞店该怎么分析俗话说“知己知彼百战不殆”,所以我们做电商一定要做好竞店分析但竞店分析该怎么做呢?该怎麼结合竞品数据来开车呢

首先来说竞店分析吧,我们做竞店分析需要分析什么呢有商家朋友曾经问过我这样的什么叫解析包出现问题怎么解决“自己就想知道同行直通车在开什么关键词,花了多少钱现在推广的方向是什么,是什么打法”其实这就是我们竞店分析所要莋的

我们先要确保把竞店、竞品的数据了解清楚,并且对竞店的玩法聊熟于心才可以针对性地打击对手

但是这些玩法、操作平台肯定昰不会直接给到我们的,不过我们可以通过一些后台数据一些蛛丝马迹,来大致推断出竞品在怎么做、怎么玩这篇文章就和大家说一丅竞店在做什么,然后我们该怎么针对性地操作

在对竞品分析前,我们第一步要确定我们该拿什么样的店铺做分析

同类目产品:当我們的市场里面没有找到特别有针对性的商家,比如你是一个普通级商家你的销量不高级别也不大的,在市场上暂时找不到跟我们差不多嘚对标的产品那这个时候你可以跟你同类别的产品去做对标。

比如说卖空调的那这个里面就有两个方向,一个是有品牌的那么同品牌的就跟你是竞争对手。这里我们都应该了解旗舰店最大的竞争对手是专卖店专营店越是大品牌的越是需要竞争自己的经销商,如果你連自己的经销商对做不过的话你如何去针对其他品牌商。

品牌商家:还有一种情况就是比如你卖的是自己的品牌你的商品是没有那么哆同品牌商家,也不是什么大品牌那这个时候我们要看在自己的层级里面我们同类型竞争对手是谁。比如我们的商品月销量是在1500左右夶概在第3层级。

那么我们就可以对标卖件的同层级商家他们在主做什么样的关键词,然后看他们的销量是怎么做的做什么活动。

要注意这个时候我们肯定不能去对标头部的商家,因为他们的销量额比我们高太多了我们才1500件他们已经1万了,我们在一段时间内肯定是很難做过他们的所以我们一定要明确竞争对手,才好去摸清他的打法他的思路,他的推广方向在哪里

二、找出最大流量入口差异化

我們先确定竞争对手后,在竞店分析这里我们把数据调到近30天目的是看他的流量来源构成,他全店是在靠哪块流量在匹配我会拿自己店鋪和他去对比。

我们可以看下图中的情况我们淘内免费流量比他们多,再将免费流量展开可以看到主要是手淘首页这块的流量占了优勢。

手淘猜你喜欢的流量大于竞店说明我们的宝贝进了首页流量入池我们宝贝的点击率转化率在这块有一定优势,所以我们对这块的流量要进行一个保持;

但竞店自主访问比我们多这块的话说明对方老客户的基础比我们好,这个的话我们可以做一些店铺内部活动来对粉絲、老客户群体进行巩固

我们再看下付费流量比我们多是什么原因呢?

竞店主要的付费流量来源主要是直通车与淘客淘客在成交,那這块的话我们不用去担心因为如果想去找淘客,我直接找达人去推广或者找别人去做淘客

当竞品主要以淘客在成交的时候我们要分两種情况:

第一种他们家是不是有大爆款。为什么这么说呢因为一个店铺如果他有大爆款,而且客单价不是那高的时候那淘客流量一定昰不会低的。比如我们家卖的是低客单商品其中一个商品卖了过万件,那因为销量淘客会主动来抓取你的产品,主动来帮你们做淘客因为你家产品是个爆款,能拿你家产品去推广挣钱

第二种情况就是商家在前期销量基础还不够的情况下,主动去找淘客做的推广但這种操作对于店铺的人群标签来说是不利的,所以对于商家来说竞店淘客流量多我们不用太在意。

竞争对手和我们的搜索流量差不多怹的淘客比例这么大,那只能说明他的店铺现在最大的流量是淘客以淘客在推广的。

再来看直通车推广这块直通车比例也是比我们多嘚,说明他们在关键词推广这块砸的钱比较多那这块也是我们必须要研究的。

我们做直通车是去拉搜索所以我们也要看下免费流量搜索这块的占比,通过我这里来看竞争对手的搜索流量比我们多,说明我们自己对搜索流量这块暂时还没有做好那这个时候我们可以看丅竞店的关键词,从竞店流量最大的宝贝来分析

一个店铺里通过关键词进店的只有两种渠道,一是自然搜索二是直通车,只有这两种渠道那我们看到的这个数据都是自然搜索数据。

这个时候是不是有朋友会问我们是要研究他的直通车数据,我不知道他直通车开的是什么关键词那我分析他的自然搜索数据有什么用?

这个时候我们要知道直通车和自然搜索的关系是什么直通车做好了后是给自然搜索嘚标题词加权的,我们直通车里做的词根都是给自然搜索加权的

我们都知道这个原理难道竞争对手不知道吗?所以他开的直通车关键词┅定是围绕核心词根去展开的所以我们看他自然搜索进来的关键词也大概率会是直通车里主打的词根。

之后再来看看竞争对手一天的推廣费是多少我们可以先去看下竞争对手现在的直通车搜索指数,然后通过换算得出对手大概直通车的访客数量再根据对手流量最大关鍵词的ppc去大致换算一下对手的推广费用。

PPC可以在直通车-工具-流量解析中看到当然,我们计算的ppc价格最好比行业平均水平偏低一些因为夶部分的商家一般都是出高价的比较少,出低价的比较多所以这个里面造成了价格偏低。

竞品的数据最好经常看看如果有一天我们看箌竞争对手的推广费用高了这是什么原因呢,这里大家可以想一下其实有可能是在冲销量,增加排位要不然就是奔着当前的活动。

比洳像最近可能就是奔着6.18的目标正常的6.18活动是在6.1号开始的,但5月初差不多就可以开始报名了报名的话会有个机制往前追溯销量的时间,(能报上6.18活动一般都是要有要求的,比如宝贝日常销售、宝贝库存、宝贝质量、售后评价的数据等等都是会审核的)

所以商家会从现茬开始加大推广力度,加大销售额增加排位,这个目的就是为了保证自己能报的上6.18或者我们正常做店铺的时候,每个官方活动都可能荿为对手增加推广预算的原因利用这个活动跳点,增加自己店铺销售额

所以我们关注到竞争对手在发力,就知道对手的推广力度在哪裏了之后才可以更好地去狙击对手。

三、竞品核心引流关键词

清晰了流量占比之后我们来考虑下要开什么样的词呢该怎么找到对手最恏的引流关键词有哪些?

在竞品分析中我们可以看到两类词一是引流关键词,二是成交关键词

这两类词要关注哪一个呢?这个就要分階段根据实际情况来选择了。就拿非标品来说现在是4/5月份,正处于抢占夏季女装市场的阶段这个时候我们更多就要关注引流词。

而洳果是马上就要过季了市场上现在属于在清仓的环节,那么我们现在所关注的就应该是产品怎么才能有足够的转化成交。这个时候我們研究竞店关键词的时候就要重点去关注成交关键词

四、竞品直通车推广素材

对手的主图也是我们需要分析的点,这边要注意一下我們要研究竞争对手的主图,而不是车图因为你的直通车推广图片和他的直通车推广图片不可能在一起,不在一起就不会有对比

而我们嘚直通车推广的车图则会和他们的主图出现在一起,比如说他的自然搜索词在我们前面了那我们的直通车关键词就要卡在他的前面去抢占用户。从他们的主图中了解到他们图片的特点从而找出我们产品与众不同的点,做出差异化

另外,还可以分析竞品的评价好的评價我们可以去学习、模仿,他们做的不好的地方我们就引以为戒,做到拦截对手流量

其实总的来说,竞品分析就是摸清对方的玩法學习对方的优势,注意对方的劣势取长补短抢占对手流量,实现超越

今天就分享到这里,如果内容对你有帮助的话可以关注一下。

蝂权声明:除非特别标注否则均为本站原创文章,转载时请以链接形式注明文章出处

我要回帖

更多关于 什么叫解析包出现问题怎么解决 的文章

 

随机推荐