• day01-项目开发流程


    多用户即时通讯系统01

    1.项目开发流程

    2.需求分析

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

    3.设计阶段

    3.1界面设计

    1. 用户登录:
    image-20220920182438430
    1. 拉取在线用户列表:
    image-20220920182554305
    1. 私聊:
    image-20220920182653008
    image-20220920182712818
    1. 群聊:
    image-20220920182846445
    image-20220920182903138
    image-20220920182920638
    1. 发文件:
    image-20220920183046013
    image-20220920183214104
    1. 文件服务器推送新闻:

    3.2通讯系统整体设计

    1. 对传输数据的分析:

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

    2. 对于socket的分析:

      在客户端连接服务器的过程中,服务器端通过端口监听,通过accept方法返回,得到一个Socket对象。客户端和服务端就是通过Socket来获取数据通道上的信息来进行相互通讯的。这意味着服务器在监听的过程中,随着连接的客户端数量的增多,服务端对应产生的Socket对象也会不断增多。

      考虑一个问题:如果服务端要同时和多个客户端进行通讯,怎么样才能保持服务端产生的所有Socket对象,分别同时和许多客户端进行通讯呢?答案是使用线程!

    3. 对服务端socket的线程的分析:

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

    4. 对客户端socket的分析:

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

      同时为了便于管理,客户端也应该有一个管理线程的集合。

    总结:

    服务端:

    1. 当有客户端连接到服务器后,服务端会得到一个socket

    2. 启动一个线程,该线程持有该socket对象,也就是说socket是该线程的属性

    3. 为了更好的管理线程,需要使用集合来管理(如:HashMap)

    客户端:

    1. 和服务端通信时,使用对象方式,可以使用对象流来读写

    2. 当客户端连接到服务端后,也会得到socket

    3. 启动一个线程,该线程持有socket

    4. 为了更好的管理线程,也将该线程放入到集合中

  • 相关阅读:
    学习路之PHP--laravel DingoApi
    mall :sa-token项目源码解析
    消费大变革时代,三只松鼠的“高端性价比”如何突围制胜?
    作为程序员,职业规划需要注意的四个阶段
    【论文笔记】NeRF-RPN: A general framework for object detection in NeRFs
    基于PHP+MySQL的高校实验室预约管理系统#毕业设计
    OpenMesh 自定义Mesh附加类型
    6.824 lab2
    [2023.09.11]: Yew的SSR中的Cargo.toml配置
    面试突击74:properties和yml有什么区别?
  • 原文地址:https://www.cnblogs.com/liyuelian/p/16712439.html