基于netty的企业即时通讯系统的设计与实现-客户端唯一标识
cookqq ›博客列表 ›netty

基于netty的企业即时通讯系统的设计与实现-客户端唯一标识

2016-04-05 20:45:15.0|分类: netty|浏览量: 2274

摘要: 服务器会保持着无数个垃圾连接,浪费大量资源。我们的原则是一个手机只能和服务器保持一个长连接。 怎么识别多个连接是否是由同一个手机发起的呢?? 那就给手机弄个身份证吧!!

客户端首次请求服务器建立连接,服务器收到请求然后建立长连接。由于客户端可能存在bug,客户端会一直请求和服务器建立连接,服务器也一直保持着这个链接。如下图所示:

blob.png

服务器会保持着无数个垃圾连接,浪费大量资源。我们的原则是一个手机只能和服务器保持一个长连接。


怎么识别多个连接是否是由同一个手机发起的呢?? 那就给手机弄个身份证吧!!

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频繁建立连接,则加入到黑名单中,防止恶意用户一直消耗服务器资源。




一键分享文章

分类列表

  • • struts源码分析
  • • flink
  • • struts
  • • redis
  • • kafka
  • • ubuntu
  • • zookeeper
  • • hadoop
  • • activiti
  • • linux
  • • 成长
  • • NIO
  • • 关键词提取
  • • mysql
  • • android studio
  • • zabbix
  • • 云计算
  • • mahout
  • • jmeter
  • • hive
  • • ActiveMQ
  • • lucene
  • • MongoDB
  • • netty
  • • flume
  • • 我遇到的问题
  • • GRUB
  • • nginx
  • • 大家好的文章
  • • android
  • • tomcat
  • • Python
  • • luke
  • • android源码编译
  • • 安全
  • • MPAndroidChart
  • • swing
  • • POI
  • • powerdesigner
  • • jquery
  • • html
  • • java
  • • eclipse
  • • shell
  • • jvm
  • • highcharts
  • • 设计模式
  • • 列式数据库
  • • spring cloud
  • • docker+node.js+zookeeper构建微服务
版权所有 cookqq 感谢访问 支持开源 京ICP备15030920号
CopyRight 2015-2018 cookqq.com All Right Reserved.