C# & JS WebSocket 部分用户无法连接服务器

Posted

技术标签:

【中文标题】C# & JS WebSocket 部分用户无法连接服务器【英文标题】:C# & JS WebSocket Some users can't connect to server 【发布时间】:2014-12-23 18:23:45 【问题描述】:

我现在遇到了一个非常大的问题: 我有一个服务器,用户可以使用 Alchemy 库连接并发送和接收用 C# 编写的消息,但现在我收到了一些来自 一些 用户的报告,他们无法连接到 websocket 服务器。在 Serverlog 中,它们会自动断开连接而不是连接。

这是 C# 代码:

internal static bool Init(int bindPort, int maxConnections)
    
        _Port = bindPort;
        _maxConnections = maxConnections;
        _activeConnections = new HashSet<int>();


        try
        
            var aServer = new WebSocketServer(_Port, IPAddress.Any)
            
                OnReceive = OnReceive,
                OnSend = OnSend,
                OnConnected = OnConnect,
                OnDisconnect = OnDisconnect,
                TimeOut = new TimeSpan(0, 5, 0)
            ;
            aServer.Start();
            Console.WriteLine(" [] WebSockets port: " + _Port + ".");
            return true;
        
        catch
        
            Console.WriteLine(" WebSocket konnte nicht geladen werden");
            return false;
        
    

    public static void SendAll(string data)
    
        foreach(UserContext Kubbo in OnlineUsers.Keys)
        
            Kubbo.Send(data);
        
    
    private static void OnConnect(UserContext context)
    
        try
        
            int connectionID = 0;
            for (int i = 1; i < _maxConnections; i++)
            
                if (_activeConnections.Contains(i) == false)
                
                    connectionID = i;
                    break;
                
            

            if (connectionID > 0)
            

                Console.WriteLine("[" + connectionID + "] Verbindung " + context.ClientAddress);

                context.Send("A");
                _activeConnections.Add(connectionID);
                _acceptedConnections++;

                var me = new User  Context = context ;
                OnlineUsers.Add(context, context.ClientAddress.ToString());
            
        
        catch
        
        
    
    internal static void OnDisconnect(UserContext context)
    
        try
        
            OnlineUsers.Remove((UserContext)context);
            Console.WriteLine("[] Verbindung wurde geschloßen");
        
        catch
        
            Console.WriteLine("");
        

    

javascript 代码(使用 JavaScript 中实现的普通 Socket API 非常简单):

 var ws = new WebSocket("ws://localhost:38819/");
 ws.onopen = function()
 
    ws.send("A");
    alert("Connection sucessfully opened");
 ;

  ws.onclose = function()
  
    alert("Connection is closed..."); 
 ;

【问题讨论】:

【参考方案1】:

服务器在什么操作系统上运行?例如,Windows 7 Ultimate 默认为 20 个并发连接。

【讨论】:

操作系统是Windows Server 2008 PS:websocket服务器的初始化是WebSocket.Init(38819, 250); 250 是最大连接数 您的应用程序是否使用并发? 不,但我有一个新标记,我已经对 7 个用户进行了测试,所有用户都有相同的浏览器和版本,但是在两个用户中,每次连接都会被另外 5 个用户关闭,它的工作就像一个魅力我真的很沮丧:/

以上是关于C# & JS WebSocket 部分用户无法连接服务器的主要内容,如果未能解决你的问题,请参考以下文章

C# HttpListener Prefixes 不接受 `ws` 阻止 JS WebSocket 连接

从 C# 程序连接基于 node.js 的 socket.io WebSocket 服务器

C# websocket与html js实现文件发送与接收处理

反应客户端:websocket.js:83 WebSocket 连接到 'ws://localhost:3009/socket.io/?EIO=4&transport=websocket' 失

用 c# 制作新的简单 websocket 服务器

用 C# 编写 WebSocket 服务器