asp.net javascript angularjs 上的慢速 C# websockets
Posted
技术标签:
【中文标题】asp.net javascript angularjs 上的慢速 C# websockets【英文标题】:Slow C# websockets on asp.net javascript angularjs 【发布时间】:2015-09-16 10:38:41 【问题描述】:这是我的第一个问题。 我正在尝试构建一个可以处理 50-100 个并发用户并每秒发送 50 条消息的 websocket 服务器。 在我的开发机器上,它适用于一个用户,但是当上传到服务器上时,它会越来越慢,具体取决于用户。 感谢您的宝贵时间。
superwebsocket 代码示例:
public class SuperWs
WebSocketServer server;
WebSocketSession[] array = new WebSocketSession[100];
public SuperWs()
server = new WebSocketServer();
server.Setup(new ServerConfig
Port = 23023,
Name = "super web socket",
LogAllSocketException = true,
LogBasicSessionActivity = true,
);
server.NewSessionConnected += NewSessionConnected;
server.NewMessageReceived += NewMessageReceived;
server.SessionClosed += SessionClosed;
server.Start();
Task.Run(() =>
while (true)
Thread.Sleep(1000);
Stopwatch sw = new Stopwatch();
sw.Start();
for (int i = 0; i < 50; i++)
for (int j = 0; j < array.Length; j++)
if (array[j] != null)
array[j].Send(string.Format("Hello! ms: 0, mes: 1", sw.ElapsedMilliseconds, i));
sw.Stop();
);
private void SessionClosed(WebSocketSession session, CloseReason value)
Console.WriteLine("0 1", session.SessionID, value);
void NewMessageReceived(WebSocketSession session, string value)
Console.WriteLine("0 1", session.SessionID, value);
private int count;
private void NewSessionConnected(WebSocketSession session)
Console.WriteLine(session);
array[count++] = session;
【问题讨论】:
您托管此应用程序的服务器的配置是什么,如果您可以发布您的代码,这将有助于了解您的连接方式?? 【参考方案1】:首先,当客户端和服务器不在同一台机器上时(例如在您的 DEV 环境中),网络会导致一些延迟。如果您连接了“n”个客户端,则需要“n * 延迟”才能将消息发送到所有节点。您应该为每个会话创建一个不同的循环,因此基本上在 NewSessionConnected
上创建一个每秒发送 50 条消息并在会话断开时结束的新循环(而不是 while(true)
)。
如果你打算进行并行工作,你应该使用async
编程并使用await Task.Delay(1000)
而不是Thread.Sleep(1000)
,因为最新的会阻塞线程,而前一个会允许线程去执行与此同时,还有其他事情。遗憾的是 SuperWebSocket 不支持async
编程。
伪代码:
private async void NewSessionConnected(WebSocketSession session)
while (session.IsConnected)
await Task.Delay(1000 / 50);
session.Send("Hello");
另外,你必须开始思考当节点断开连接时你会做什么:)
作为旁注,我开发了一个WebSocket framework that supports async programming,即流量should be no problem。
【讨论】:
以上是关于asp.net javascript angularjs 上的慢速 C# websockets的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET 页面加载完成后运行 javascript 函数