首页 > 其他分享 >Server端架构

Server端架构

时间:2024-07-30 09:42:10浏览次数:14  
标签:架构 server client Server 连接 clientSocket 客户端

  • Server:创建TCP的socket,监听客户端的连接。当一个客户端连接server的时候,server会单独创建一个client用来维护跟某一个客户端的连接,进行一个收发消息。client会有多个,一个客户端对应一个client,所以说后续不同的请求是通过client来调用controller进行处理。server会对client做一个管理,管理所里客户端的连接(为了优化对数据库的访问速度我们创建多个连接,如果只使用一个连接所有客户端都用一个连接查询起来就会慢,所以我们创建多个连接,一个client一个controller,connHelper放到client这边。)client会通过ConnHelper去建立一个连接,这样的话一个客户端就是一个连接,当客户端不需要的时候我们就对它进行一个销毁,跟数据库的连接也销毁掉。我们每次来一个请求client会去调用controller,controller会去调用DAO,接着DAO会去操作有需要跟数据库操作的话会操作数据库。(DAO有需要跟数据库做连接的时候就会从client这边来进行取得跟客户端的连接就是mysqlconnection)
  • Controller:用来处理客户端的请求的,发送到server,server会调用相应的controller来进行处理。controller有很多个,处理不同的客户端的连接和请求。在处理的过程中可能涉及到数据库相关,就是DAO层交互。
  • DAO:data access object,数据访问对象是一个面向对象的数据库接口。其实就是用来操作数据库的。DAO层要处理数据库要和两类打交道,一类是Model;另一类是ConnHelper。
  • Model:就是模型——数据库模型。跟我们数据库里的表是对应着的,一个model类对应一个数据库表。
  • ConnHelper:工具类,用来连接数据库的,建立mysqlConnect 。

 

 1 using System.Net;
 2 using System.Net.Sockets;
 3 
 4 namespace Client.Server
 5 {
 6      class Server
 7     {
 8         //定义一些变量存储一些东西
 9         private IPEndPoint _ipEndPoint;
10         private  Socket serverSocket;
11         private List<Client> clientList;//把所有的客户端都管理起来,创建一个list集合
12        //给他提供一个空的构造方法,后期进行一个设置
13         public Server() 
14 {}
15         //给他提供一个带参数的构造方法,我们开启服务端的时候需要ip和端口号。
16         public Server(string ipStr,int port) 
17         {
18             SetIpAndPort(ipStr,port);
19         }
20         //set方法设置IP和端口号
21         public void SetIpAndPort(string ipStr,int port)
22         {
23             _ipEndPoint = new IPEndPoint(IPAddress.Parse(ipStr), port);
24         }
25         //进行启动server端,启动监听
26         public void Start()
27         {
28             serverSocket=new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
29             serverSocket.Bind(_ipEndPoint);
30             serverSocket.Listen(0);
31             serverSocket.BeginAccept(AcceptCallBack, null) ;
32         }
33         //使用异步的方式调用多个客户端的连接
34         private void AcceptCallBack(IAsyncResult ar)
35         {
36             Socket clientSocket = serverSocket.EndAccept(ar);//得到跟客户端的连接,接收到客户端的连接
37             Client client = new Client(clientSocket,this);
38             client.Start();
39             clientList.Add(client);
40 
41         }
42         public void RemoveClient(Client client)
43         {
44             //多个客户端可能都要去访问clientList去进行移除,把他锁定了之后再进行移除,防止多线程同时访问共享的clientList矛盾异常
45             lock (clientList)
46             {
47                 clientList.Remove(client);
48                
49             }
50             
51         }
52     }
53 }
using System.Net.Sockets;

namespace Client.Server
{
    //专门用来处理与客户端的通信问题
    class Client
    {
        private Socket clientSocket;
        private Server server;//这边可能会与server交互,也需要持有一下
        
        //给他提供一个空的构造方法,后期进行一个设置
        public Client(){}
        public Client(Socket clientSocket, Server server)
        {
            this.clientSocket = clientSocket;
            this.server = server;
        }
        //表示开启监听
        public void Start() 
        {
            clientSocket.BeginReceive(null,0,0,SocketFlags.None,ReceiveCallBack,null);
        }
        private void ReceiveCallBack(IAsyncResult ar) 
        {
            try
            {
                int count = clientSocket.EndReceive(ar);//首先要接收数据的长度
                if (count == 0)
                {
                    Close();
                }
                //todo  处理接收到的数据
              Start();
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                Close();
            }    
        }
        //专门断开连接的方法
        private void Close()
        {
            if(clientSocket != null) 
                clientSocket.Close();
            server.RemoveClient(this);
        }
    }
}

 

 

 

标签:架构,server,client,Server,连接,clientSocket,客户端
From: https://www.cnblogs.com/siki2017/p/18331566

相关文章

  • Dom-API | MutationObserver使用方法详解
    MutationObserver介绍MutationObserver是是一个用于监视DOM变动的WebAPI。通过它可以监控DOM树中的更改,比如元素的属性、子元素的增加和删除等,并在这些变化发生时执行回调函数。可以替代过时的MutationEvents,它具有更高的性能和更广的适用性。使用步骤详细说明1.创......
  • 架构 | 互联架构的图建模分析
    互联网络泛泛谈互联网络是一种图结构,节点之间通过边连接。比如一般总线计算机架构中CPU、Memory、Timer等模块看作节点,通过总线相连。每个节点在网络中的身份是不对等的,有master和slave之分,或者按TLM中的模型initiator和target。Initiator有权申请发起传输事务,而......
  • SQLServer 事务复制在发布端(publication)和订阅端(subscription)对应的数据库还原之后复
     书接上文,在一个正常的事务复制环境中,如果发生了数据库还原,事务复制会不会出问题,出问题之后又如何恢复,如果在不删除订阅发布重建的情况下,如何在现有基础上修复事务复制的异常,这个问题可以分为两部分看:1,如果publisher数据库发生了还原操作,事务复制会出现什么异常,该如何恢复?2,如......
  • SQL Server简介
    一、SQLServer的历史SQLServer的起源可以追溯到20世纪80年代末。当时,微软公司与Sybase合作开发了一个关系数据库管理系统(RDBMS),这就是SQLServer的前身。最早的版本是针对OS/2操作系统开发的。随着时间的推移,微软逐渐在SQLServer的开发和维护中占据了主导地位,最终在1993年,......
  • 网站报错“internal server error”
    错误记录:网站报错“internalservererror”错误原因:1、数据库问题2、配置问题3、中毒引起4、程序漏洞 5、日常维护解决方案:使用排查方法,不同网站处理方案有所差异。不过大多属于数据库问题(网站读写操作都在数据库,数据库如果异常的话,访问不正常,遇......
  • 即时聊天系统(类微信社区)开发需求与功能架构分析
    在当今数字化时代,即时通讯应用如微信、QQ、Telegram等已成为人们日常生活中不可或缺的一部分。这些平台不仅支持基础的文字、图片、视频消息传输,还集成了朋友圈分享、个人信息管理、以及高效的通知系统等多元化功能。以下是对一个类微信即时聊天系统开发需求与功能架构的详细分析......
  • Jenkins结合SVN报错E230001: Server SSL certificate verification failed的解决方法
    报错如下:svn:E230001:Commitfailed(detailsfollow):svn:E230001:UnabletoconnecttoarepositoryatURL'https://192.168.0.99/svn/xxx/dat'svn:E230001:ServerSSLcertificateverificationfailed:certificateissuedforadifferenthostname,is......
  • 【基础篇】Docker 架构与组件 TWO
    嗨,小伙伴们!我是小竹笋,一名热爱创作的工程师。上一篇我们聊了聊Docker的历史与发展、与虚拟机的对比以及它在行业中的应用。今天,让我们更进一步,深入探讨Docker的架构与关键组件。欢迎订阅公众号:JAVA和人工智能......
  • 基于Drone实现CI/CD【0到1架构系列】
    CI/CD是持续性集交和持续性部署,简单来讲就是自动化构建和自动化部署。目前有很多集成方案,也有很多组装方案,只要能实现自动化构建出制品,再自动部署到生产环境就行。目前很多源代码都集成了CI/CD功能,drone也是目前比较流行的一个方案,简单易用,高性能。前提条件已经使用Gitea部署作......
  • 互联网金融理财业务架构
    金融平台业务中心划分合约订单中心、支付中心、账户中心、客户中心、商品(产品)中心、运营中心、营销中心、多机构中心、技术服务平台、协议转换前置、渠道前置、网银前置、柜面系统、网银(前端)、同业财富等。合约订单中心当用户通过互联网金融平台预订、购买金融产品或者首次......