C# 中的网络是我相对较新的东西,所以我想知道如何在特定项目中开始使用它。
最终,我想开发一个服务器,它可以同时连接多达一千个客户端(TCP 协议)。
我知道为每个客户端创建一个新线程可能会非常低效,尤其是当每个线程的内存开销通过 100 个客户端时。
很简单,我要问的是,任何人都可以在任何地方建议我可以找到更多关于开始为许多客户开发“多线程”服务器的信息。
(如果这个问题太宽泛,请添加评论。)
C# 中的网络是我相对较新的东西,所以我想知道如何在特定项目中开始使用它。
最终,我想开发一个服务器,它可以同时连接多达一千个客户端(TCP 协议)。
我知道为每个客户端创建一个新线程可能会非常低效,尤其是当每个线程的内存开销通过 100 个客户端时。
很简单,我要问的是,任何人都可以在任何地方建议我可以找到更多关于开始为许多客户开发“多线程”服务器的信息。
(如果这个问题太宽泛,请添加评论。)
您可以尝试SignalR
使用套接字。
是什么
SignalR
?
ASP.NET SignalR 是一个供 ASP.NET 开发人员使用的库,它简化了向应用程序添加实时 Web 功能的过程。实时 Web 功能是让服务器代码在内容可用时立即将内容推送到连接的客户端的能力,而不是让服务器等待客户端请求新数据。
...
SignalR
提供了一个简单的 API,用于创建服务器到客户端的远程过程调用 (RPC),它JavaScript
从服务器端 .NET 代码调用客户端浏览器(和其他客户端平台)中的函数。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();
});
});
默认性能常数确实涵盖了最多 1000 个同时请求的限制。