ASP.NET那点不为人知的事(四)

简介:

虽然开发中很少接触多线程,但你必须承认你离不开他。

接着上篇博客(ASP.NET那点不为人知的事(三)),基本可以实现一个Mini版的服务器,但也有不足:

倘若客户端飞快地连接,服务端很快被压垮。

幸好,Socket类实现了.NET框架的异步调用模式,使用这个模式,利用线程池就可以让服务器更好的服务于到来的请求。

重构后的版本:

复制代码
class Program
    {
        private const int ConnectionQueueLength = 4;
        private const int ListenPort = 1234;
        private const int MaxConnectionHandlers = 4;
        static void HandleConnection(IAsyncResult ar)
        {
            //AsyncResult asyncResult = (AsyncResult) ar;
            Socket listener=(Socket)ar.AsyncState;
            Socket newConnectin = listener.EndAccept(ar);

            byte[] msg = Encoding.UTF8.GetBytes("Hello World");

            newConnectin.BeginSend(msg, 0, msg.Length, SocketFlags.None, new AsyncCallback(Program.CloseConnection),
                                   newConnectin);


        }
        static void CloseConnection(IAsyncResult ar)
        {
            Socket socket = ar.AsyncState as Socket;
            if (socket!=null)
            {
                socket.Close();
            }
        }
        
        static void Main(string[] args)
        {
            Socket listenSocket=new Socket(AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp);
            listenSocket.Bind(new IPEndPoint(IPAddress.Any,ListenPort));

            listenSocket.Listen(ConnectionQueueLength);
            for (int i = 0; i < MaxConnectionHandlers; i++)
            {
                listenSocket.BeginAccept(new AsyncCallback(Program.HandleConnection), listenSocket);    
            }
            Console.ReadKey();
        }
    }
复制代码

这样我们的服务器更加有效率,他从线程池中发送数据回去。

注意这儿的异步调用(new AsyncCallback(Program.CloseConnection))使用了一个关闭连接的回调方法,因为为了让服务器更加高效,让侦听线程在EndSend等待是没有任何意义的,因为它将堵塞当前线程。 

总结

服务器阶段就结束了,相信你也对他有一定的了解了,接下来会再讲讲ASP.NET 中是怎样实现多线程的。

本博客为 木宛城主原创,基于 Creative Commons Attribution 2.5 China Mainland License发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名 木宛城主(包含链接)。如您有任何疑问或者授权方面的协商,请给我留言。

本文转自木宛城主博客园博客,原文链接:http://www.cnblogs.com/OceanEyes/archive/2013/04/02/aspnet_melodies_server_2.html,如需转载请自行联系原作者
目录
相关文章
|
分布式计算 并行计算 Java
浅析Python自带的线程池和进程池
浅析Python自带的线程池和进程池
1138 0
An工具介绍之宽度工具、变形工具与套索工具
An工具介绍之宽度工具、变形工具与套索工具
2322 0
An工具介绍之宽度工具、变形工具与套索工具
|
Windows
Windows环境CMake安装教程
Windows环境CMake安装教程
1742 0
Windows环境CMake安装教程
|
11月前
|
机器学习/深度学习 传感器 大数据
大数据如何化解城市交通拥堵的难题?
大数据如何化解城市交通拥堵的难题?
374 5
|
12月前
|
存储 人工智能 自然语言处理
知识库管理:全流程智能化中枢,驱动企业信息资产高效流转
智能系统的知识库管理技术可以深度融合AI技术与精细化流程控制,提供从内容创建到版本追溯的全生命周期管理。支持多模态数据统一存储(文本、语音、图像等),实现自动化审核、智能分类与语义检索,确保企业知识资产的安全存储与高效利用,助力业务持续优化。核心功能包括多角色协作编辑、动态标签管理、历史版本追溯及毫秒级语义检索,大幅提升信息管理效率与准确性。
583 9
|
Kubernetes 搜索推荐 API
|
JavaScript Java 测试技术
基于SpringBoot+Vue的健身房管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的健身房管理系统的设计与实现(源码+lw+部署文档+讲解等)
230 2
基于SpringBoot+Vue的健身房管理系统的设计与实现(源码+lw+部署文档+讲解等)
|
机器学习/深度学习 人工智能 自然语言处理
Prompt提示词的精华点缀,这一篇文章就懂了!
Prompt提示词的精华点缀,这一篇文章就懂了!
474 0
|
监控 安全 网络协议
SOCKS/SOCKS5代理协议是什么
SOCKS代理协议是客户端与服务器间通信的桥梁,通过中间服务器实现安全连接。SOCKS5是其升级版,增加了用户认证、UDP支持和IPv6地址功能,提供更强加密和更高安全性。常用于匿名浏览、企业流量监控及网络访问安全。理解其原理并恰当使用,能保障网络隐私和安全。
|
存储 C语言
数据结构学习笔记——栈的基本知识和顺序存储结构实现栈(顺序栈)
数据结构学习笔记——栈的基本知识和顺序存储结构实现栈(顺序栈)
数据结构学习笔记——栈的基本知识和顺序存储结构实现栈(顺序栈)