【问题标题】:Sockets in .NET - Getting started with a multithreaded server.NET 中的套接字 - 多线程服务器入门
【发布时间】:2017-04-12 08:48:35
【问题描述】:

C# 中的网络是我相对较新的东西,所以我想知道如何在特定项目中开始使用它。

最终,我想开发一个服务器,它可以同时连接多达一千个客户端(TCP 协议)。

我知道为每个客户端创建一个新线程可能会非常低效,尤其是当每个线程的内存开销通过 100 个客户端时。

这么简单,我要问的是,任何人都可以在任何地方建议我可以找到更多关于开始为许多客户端开发“多线程”服务器的信息。

(如果这个问题太宽泛,请添加评论。)

【问题讨论】:

  • 本质上它不仅仅是一个 C# (.NET) API 问题。请参阅smallvoid.com/article/winnt-tcpip-max-limit.html 了解可能会破坏您的计划的方面的一个很好的总结,尽管有点陈旧。此外,鉴于在 Windows 中许多系统资源或多或少明显属于本机类型HANDLE(它们是可等待的),您可以轻松地使用线程池来管理多个连接。每个连接 1 个线程的方法不是您唯一的选择。此外,您可能想查看 completion port 的用途,因为这会给您提供新的想法来做您想做的事情。

标签: c# multithreading sockets clients


【解决方案1】:

您可以尝试SignalR 用于套接字。

什么是SignalR
ASP.NET SignalR 是一个供 ASP.NET 开发人员使用的库,它简化了向应用程序添加实时 Web 功能的过程。实时网络功能是让服务器代码在内容可用时立即将内容推送到连接的客户端的能力,而不是让服务器等待客户端请求新数据。
...
SignalR 提供了一个简单的 API,用于创建从服务器端 .NET 代码调用客户端浏览器(和其他客户端平台)中的JavaScript 函数的服务器到客户端远程过程调用 (RPC)。 SignalR 还包括用于连接管理(例如,连接和断开事件)和分组连接的 API。

要实现服务器,您需要从Hub 类派生:

using System;
using System.Web;
using Microsoft.AspNet.SignalR;
namespace SignalRChat
{
    public class ChatHub : Hub
    {
        public void Send(string name, string message)
        {
            // Call the broadcastMessage method to update clients.
            Clients.All.broadcastMessage(name, message);
        }
    }
}

从客户端javascript是这样的:

var chat = $.connection.chatHub;
chat.client.broadcastMessage = function (name, message) {
  // interact with server
}
$.connection.hub.start().done(function () {
    $('#sendmessage').click(function () {
        // Call the Send method on the hub. 
        chat.server.send($('#displayname').val(), $('#message').val());
        // Clear text box and reset focus for next comment. 
        $('#message').val('').focus();
    });
});

Supported Platforms for SignalR 是:

  • 服务器端
    • Windows Server 2012
    • Windows Server 2008 r2
    • Windows 8
    • Windows 7
    • Windows Azure
  • 客户端
    • 浏览器
    • Microsoft Internet Explorer 版本 8、9、10 和 11。支持现代、桌面和移动版本。
    • Mozilla Firefox:当前版本 - 1,Windows 和 Mac 版本。
    • Google Chrome:当前版本 - 1,Windows 和 Mac 版本。
    • Safari:当前版本 - 1,Mac 和 iOS 版本。
    • Opera:当前版本 - 1,仅限 Windows。
    • Android 浏览器
    • Windows 桌面和 Silverlight 应用程序
    • Windows XP SP3 或更高版本支持使用 .NET 4 的应用程序。
    • Windows Vista 或更高版本支持使用 .NET Framework 4.5 的应用程序。
    • Windows 应用商店和 Windows Phone 8 应用程序

Default performance constants 确实涵盖了最多 1000 个同时请求的限制。

【讨论】:

  • 并不是我真正想要的,但是,我可能会记住这一点以备不时之需。谢谢。但是,我现在已经对所有内容进行了排序,不再需要我的问题的答案:)
  • 那你应该自己回答你的问题给别人提供解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-17
  • 2015-01-21
  • 2019-06-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多