Java基于队列实现非阻塞高性能HTTP服务器

在上一篇文章中,我们使用了单线程和多线程实现HTTP服务器,虽然多线程可以提高吞吐量,但是弊端也不可避免,主要有两方面考虑:

1、线程的开销是很大的

2、5个线程只能同时处理5个请求,剩下的请求会被阻塞挂起

基于这种考虑,我们可以使用队列来实现非阻塞HTTP服务器,性能会提高一大截。

package com.cctv.http;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * @Title:
 * @BelongProjecet http-demo
 * @BelongPackage com.cctv.http
 * @Description:
 * @Copyright CCTV.com
 * @Author: lingchuan
 * @Date: 2020-04-27 11:32
 */
public class QueueHttpServer {
    public static volatile ConcurrentLinkedQueue<Socket> socketQueue = new ConcurrentLinkedQueue();

    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(8080);
        ExecutorService executor = Executors.newFixedThreadPool(5);
        for (int i = 0; i < 5; i++) {
            executor.execute(new MultiServer());
        }
        while (true) {
            Socket socket = serverSocket.accept();
            socketQueue.add(socket);
        }
    }
}

class MultiServer implements Runnable {


    public MultiServer() {
    }

    public void run() {
        while (true) {
            Socket socket = QueueHttpServer.socketQueue.poll();
            if (socket == null) {
                continue;
            }
            try {
                System.out.println("Thread:" + Thread.currentThread());
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                String line = "";
                while ((line = bufferedReader.readLine()) != null && line.equals("")) {
                }
                PrintWriter printWriter = new PrintWriter(socket.getOutputStream(), true);
                printWriter.println("HTTP/1.1 200 OK");
                printWriter.println("Content-Type: text/html; charset=UTF-8");
                printWriter.println("");
                printWriter.println("It's Work!");
                printWriter.close();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java高并发MQTT服务器是一种基于Java语言开发的消息队列遥测传输协议(MQTT)服务器,它能够处理大量的并发连接和消息传输请求。 首先,Java作为一种跨平台的编程语言,具有优秀的跨平台性能,可以在各种操作系统上运行,适用于不同的场景和需求。其次,Java拥有强大的并发编程能力,可以有效地处理大量的并发请求,提高服务器的性能和吞吐量。 对于MQTT服务器来说,高并发是一个重要的要求。Java高并发MQTT服务器通过采用多线程技术和线程池机制,可以同时处理多个客户端连接和消息传输请求,充分利用服务器的资源,提高系统的响应速度和吞吐量。 在实现高并发的过程中,Java高并发MQTT服务器还采用了一些优化策略。例如,通过使用NIO(阻塞IO)技术,可以减少线程的阻塞等待时间,提高系统的处理效率。同时,还可以使用缓存机制对频繁访问的数据进行缓存,减少对数据库等资源的频繁访问,提高系统的响应速度。 此外,Java高并发MQTT服务器还采用了负载均衡和分布式部署等技术,可以将并发请求分配到不同的服务器节点上进行处理,提高系统的稳定性和可靠性。 总之,Java高并发MQTT服务器利用Java的优点和技术,能够处理大量的并发连接和消息传输请求,提高系统的性能和吞吐量,适用于高并发的场景和需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值