`
whao189
  • 浏览: 124879 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

scoket创建多线程服务器

阅读更多
这几天再看socket感觉收获还是蛮大的,以前对socket不太了解正好这一段时间可以好好地学习顺便整理一下以前的知识。

其他的前辈们都学如果做java没有接触过socket那就算没有学java 可见socket是相当重要的,更为可气的是我现在线程这一块的东西都没有怎么接触过,说来惭愧啊。。。

好了直接看demo

需求如下:现在我有一个socket 服务器 有N个客户端要连接这个服务器 那么我们如何处理这种情况。

分析如下:
      当我们的server 接收到一个客户端的就会以客户端进行通信然后断开 关闭连接,然后接收下一个 ,加入有N多个客户端同时请求的话(也就是并发了)那么server 无法同时与多个客户端进行通信

解决方案:
第一: 我们使用多线程 每当有一个客户端与server连接的时候我们就启动一个线程 来处理该客户端的请求
第二: 我们使用线程池(这个分为两种情况 我们可以自己写线程池 也可以使用JDK 中的)

方案优劣评定:在代码后面在评定吧.

第一种方案 伪代码如下:

public void service()throws Exception{
   while(true){
       Socket socket = socketServer.accept();
       Thread thread = new Thread(new Handler(socket));
       thread.start();
   }
}
class Handler implements Runnable{
   private Socket socket;
   public Handler(Socket socket){
   this.socket = socket
   }
   public void run(){
      //这里处理相应的逻辑
   }
}



第二种方案 伪代码如下:
 public class Server{
    private ExecutorServer executorService;
    private ServerSocket serverSocket;
    public Server(){
       serverSocket = new ServerSocket();
       executorService = ExecutorService.newFixedThreadPool(5);
    }
    public void service()throws Exception{
      while(true){
       Socket socket = serverSocket.accept();
       executorService.execute(new Handler(socket))
       system.out.println("启动了服务器");
      }
    }
 }
class Handler implements Runnable{
   private Socket socket;
   public Handler(Socket socket){
   this.socket = socket
   }
   public void run(){
      //这里处理相应的逻辑
   }
}



以上两种形式都能实现多线程下的 socket 服务,但是功能都能实现然而效率未必相同。

就第一种方案来讲:如果说客户端比较少的情况下服务器还是能支撑,但是在客户端很多的情况无论如何服务器如何优化,频繁的创建和销毁线程总是会占用很大的开销的。。

所以第一种方案我个人认为在大多数情况下不可行,如果其他看客有好的解决方案可以共享一下!

第二宗方案:多线程实现是基于JDK 下的线程池来实现的,我个人感觉不错(当然如果你认为自己能写出比java大师们写的更好的线程池的话 麻烦让我来拜读一下,,谢谢!) 他创建线程的个数是依赖于 服务器的cpu数 来创建的。。。。不过这里我们给他定死了。就是5个。。。这样做的好处是减少了系统频繁的创建和销毁线程占用的资源。。。


但是无论如何我始终认为 以上两种做法会有问题,第一种就不说了。。。至于第二种 我在想如果 我们创建了 N 多个线程,那么服务器端我们是通过队列来处理的,如果请求比较多 比较频繁的话队列里面怎么优化?

如果即使优化了那么还会出现线程阻塞么? 如果会,应该怎么解决?


分享到:
评论

相关推荐

    C#编写Socket Sever多线程服务器

    在本文中,我们将深入探讨如何使用C#语言编写一个基于Socket的多线程服务器。C#作为.NET框架的一部分,提供了强大的网络编程能力,使得开发者能够方便地构建高性能、可扩展的网络应用程序。Socket Server通常用于...

    QT Socket编程 多线程服务器

    QT Socket编程多线程服务器是将QT框架与网络通信中的Socket技术相结合,通过多线程实现高并发处理的服务器架构。在理解这个主题时,我们需要深入理解以下几个关键知识点: 1. **QT框架**:QT是一个跨平台的应用程序...

    SOCKET+多线程例子

    本示例项目"SOCKET+多线程例子"旨在帮助初学者掌握这两个关键概念,以便于创建高效的网络通信应用。 首先,让我们深入理解Socket。Socket是网络通信中的一个接口,它允许两个运行在不同机器上的程序通过网络进行...

    Qt Socket 多线程代码实现

    初学者可以通过阅读这些代码,了解如何在Qt中设置多线程服务器,如何使用QTcpSocket进行通信,以及如何处理连接和数据传输。 总的来说,这个项目是一个很好的起点,它涵盖了Qt网络编程和多线程的基本概念,对于想...

    socket多线程服务器和客户端

    在这个"socket多线程服务器和客户端"的示例中,我们将探讨如何使用多线程技术来处理来自多个客户端的并发连接,这对于大型网络应用来说是非常重要的。 首先,让我们从服务器端开始。在服务器端,我们通常会创建一个...

    delphi多线程socket服务器客户端

    本篇文章将详细探讨Delphi如何利用多线程和Socket技术来构建一个服务器客户端系统。 一、多线程 多线程是并发执行多个任务的能力,它允许程序同时处理多个请求,提高应用的响应速度和资源利用率。在Delphi中,我们...

    java_Socket多线程服务器源代码介绍

    ### Java Socket多线程服务器源代码介绍 #### 一、Java Socket基础知识 在开始之前,我们先了解一下Java Socket的基本概念。Socket是一种用于网络通信的技术,它允许不同计算机上的应用程序通过网络进行通信。Java...

    vc socket tcp 多线程客户端--服务器结构的例子.visual c++

    本文将深入探讨基于Visual C++的TCP多线程客户端-服务器结构,并以"vc socket tcp 多线程客户端--服务器结构的例子"为例进行解析。这个例子包含了一个名为"RawSocketServerExample"的文件,很可能是实现此架构的源...

    socket多线程服务器

    Socket多线程服务器是一种在计算机网络编程中常见的设计模式,特别是在需要处理大量并发连接的场景下。这种服务器架构允许每个连接的客户端都有一个独立的线程来服务,从而避免了单线程服务器在处理多个连接时可能...

    SOCKET 服务端 多线程处理客户端例子

    在计算机网络编程中,Socket是实现进程间通信(IPC)的一种方式,特别是在互联网环境中,它提供了...对这个程序进行深入学习和分析,可以帮助你理解多线程Socket服务端的工作原理,并为构建自己的并发服务器提供基础。

    socket 一个服务器对应多个客户端使用多线程

    在标题"socket 一个服务器对应多个客户端使用多线程"中,提到的是使用Socket编程来设计一个服务器,该服务器能够同时处理来自多个客户端的连接请求,这通常被称为“一对一”或“一对多”模型。在Linux环境下,这种...

    基于TCP/IP的Socket多线程通信(服务器和客户端)

    本主题将深入探讨基于TCP/IP的Socket如何实现多线程通信,包括服务器端和客户端的设计与实现。 1. **TCP/IP协议**:传输控制协议/互联网协议(TCP/IP)是互联网上广泛使用的通信协议标准。TCP负责数据的可靠传输,...

    c#超级Socket库SuperSocket,SOCKET多线程编程

    1. **多线程支持**:SuperSocket采用了多线程模型来处理客户端的连接,确保了服务器的高并发性能。每个客户端连接都会被分配到一个独立的工作线程,从而避免单个连接阻塞其他连接的情况。 2. **简单易用的API**:...

    基于SOCKET和多线程的应用程序间通信技术的研究.pdf

    《基于SOCKET和多线程的应用程序间通信技术的研究》一文深入探讨了在不同程序之间采用SOCKET和多线程技术进行数据通信的方法。本文将详细解析标题和描述中的核心知识点,包括SOCKET和多线程的基本原理,以及它们在...

    C++编写 win32控制台下 Socket通信 多线程 聊天室 服务器 客户端

    C++语言编写,SOCKET套接字通信,分服务器和客户端,多线程模型,Win32控制台。 首先聊天室分为服务端和客户端,通过TCP连接通信。运行顺序为: 1.首先打开服务服; 2.打开客户端,用户输入名字,连接到服务端后...

    MFC实现多个客户端通过服务器进行通信的Socket多线程编程

    1.基于MFC通过多线程实现多个客户端同时连接服务器。 2.服务端通过维护一张转发表来实现对客户端信息的转发,比如客户端A向客户端B发送消息,服务器接收到客户端A发过来消息内容和客户端B信息之后,通过转发表查找到...

    socket 多线程 例程 非阻塞模式

    这个示例中的源代码包含了客户端和服务器端的实现,通过运行这些代码,你可以实际观察到多线程非阻塞模式下的socket通信。客户端发送数据到服务器,而服务器接收并回应,整个过程是并行且高效的。 总之,"socket多...

    Socket和多线程的聊天室

    Socket编程和多线程技术是计算机网络编程中的两个重要概念,尤其在开发实时通信应用,如聊天室时,它们起着关键作用。本项目“Socket和多线程的聊天室”是一个基于控制台的简单聊天应用程序,允许用户通过命令行进行...

    SOCKET实现多线程TCP连接源码

    总结来说,"SOCKET实现多线程TCP连接源码"是一个实用的学习案例,它展示了如何利用Java的Socket API和多线程技术构建高效的TCP服务器,处理并发客户端连接。通过分析和理解这个示例,开发者可以更好地掌握网络编程和...

    C#开发的基于Socket的多线程服务器端短信转发程序

    本项目是一个基于C#的多线程服务器端短信转发程序,它利用Socket技术实现高效的信息处理和并发能力,适合大规模并发场景。下面将详细阐述这个程序的核心知识点。 1. **C#编程基础**:C#是微软推出的面向对象的编程...

Global site tag (gtag.js) - Google Analytics