多用户及时通信系统之需求分析(1)

一、需求分析

  1. 用户登录
  2. 拉取在线用户列表
  3. 无异常退出(客户端、服务端)
  4. 私聊
  5. 群发
  6. 发文件
  7. 服务器推送新闻

1.1 界面设计

1
2
3
4
5
6

1.2 系统设计

系统分析
系统分析2

  1. 对传输数据的分析:
    因为在通讯的时候信息的种类和信息比较多,如果使用文本的方式来传递数据,那么服务器拿到信息的时候对其进行拆解会很麻烦。因此使用对象的方式来进行数据的传输(同时使用对象流来传输)

  2. 对于socket的分析:
    在客户端连接服务器的过程中,服务器端通过端口监听,通过accept方法返回,得到一个Socket对象。客户端和服务端就是通过Socket来获取数据通道上的信息来进行相互通讯的。这意味着服务器在监听的过程中,随着连接的客户端数量的增多,服务端对应产生的Socket对象也会不断增多。
    考虑一个问题:如果服务端要同时和多个客户端进行通讯,怎么样才能保持服务端产生的所有Socket对象,分别同时和许多客户端进行通讯呢?答案是使用线程!

  3. 对服务端socket的线程的分析:
    服务端广播的时候,服务器需要对所有客户端进行通知,需要对服务器端的所有socket进行处理,为了便于管理,这时候就需要有一个管理线程的集合

  4. 对客户端socket的分析:
    在服务端里,有一个管理线程的集合,集合中的每个线程都有一个socket,每个socket都对应着一个数据通道。现在来考虑:在一个客户端中,也有可能有与服务器创建多个连接,也就是一个客户端和服务端产生多个数据通道的情况,即在一个客户端中,也有可能产生多个socket。因此在客户端也应该使用线程。
    同时为了便于管理,客户端也应该有一个管理线程的集合。

总结

服务端

  • 当有客户端连接到服务器后,服务端会得到一个socket
  • 启动一个线程,该线程持有该socket对象,也就是说socket是该线程的属性
  • 为了更好的管理线程,需要使用集合来管理(如:HashMap)

客户端

  • 和服务端通信时,使用对象方式,可以使用对象流来读写
  • 当客户端连接到服务端后,也会得到socket
  • 启动一个线程,该线程持有socket
  • 为了更好的管理线程,也将该线程放入到集合中

下一篇: 多用户登录功能实现

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值