[英]Sockets in .NET - Getting started with a multithreaded server
使用C#進行網絡連接是我相對較新的事物,因此我想知道如何在特定項目中開始使用它。
最終,我想開發一種服務器,該服務器可以同時連接多達一千個客戶端(TCP協議)。
我知道為每個客戶端創建一個新線程可能會非常低效,尤其是在例如每個線程通過100個客戶端時,每個線程的內存開銷都很大。
簡而言之,我要問的是,任何人都可以建議我在任何地方找到更多有關開始為許多客戶端開發“多線程”服務器的信息。
(如果這個問題太籠統,請添加評論。)
您可以嘗試使用SignalR
for sockets。
什么是
SignalR
?
ASP.NET SignalR是面向ASP.NET開發人員的庫,它簡化了向應用程序添加實時Web功能的過程。 實時Web功能是使服務器代碼在內容可用時立即將其推送到連接的客戶端的功能,而不是讓服務器等待客戶端請求新數據的功能。
...
SignalR
提供了一個簡單的API,用於創建服務器到客戶端的遠程過程調用(RPC),該過程從服務器端.NET代碼在客戶端瀏覽器(和其他客戶端平台)中調用JavaScript
函數。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個同時請求的限制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.