2016-04-05 20:45:15.0|分类: netty|浏览量: 2169
客户端首次请求服务器建立连接,服务器收到请求然后建立长连接。由于客户端可能存在bug,客户端会一直请求和服务器建立连接,服务器也一直保持着这个链接。如下图所示: 服务器会保持着无数个垃圾连接,浪费大量资源。我们的原则是一个手机只能和服务器保持一个长连接。 怎么识别多个连接是否是由同一个手机发起的呢?? 那就给手机弄个身份证吧!! ip+端口号 能当身份证吗?? 不可以啊!! 身份证号 = 设备号+mac地址,具体代码实现如下: private UUID deviceUuid(Context paramContext) { String str1 = Build.BOARD + Build.BRAND + Build.CPU_ABI + Build.DEVICE + Build.DISPLAY + Build.FINGERPRINT + Build.HOST + Build.ID + Build.MANUFACTURER + Build.MODEL + Build.PRODUCT + Build.TAGS + Build.TYPE + Build.USER; TelephonyManager localTelephonyManager = (TelephonyManager)paramContext.getSystemService("phone"); String str2 = localTelephonyManager.getDeviceId(); String str3 = Settings.Secure.getString(paramContext.getContentResolver(), "android_id"); WifiManager localWifiManager = (WifiManager)paramContext.getSystemService("wifi"); String str4 = localWifiManager.getConnectionInfo().getMacAddress(); if ((isEmpty(str2)) && (isEmpty(str3)) && (isEmpty(str4))) { return UUID.randomUUID(); } String str5 = str1.toString() + str2 + str3 + str4; return UUID.nameUUIDFromBytes(str5.getBytes()); } 如果同一个Ip多次请求,一秒请求几十次或者上百次,这说明程序不正常或者有人估计攻击服务器,这是我们就需要建立黑明白,设定相应的规则。实现黑名单,检测一段时间内同一个ip频繁建立连接,则加入到黑名单中,防止恶意用户一直消耗服务器资源。 |