Công cụ bảo vệ mã nguồn .NET mạnh nhất, không thể unpack, miễn phí cho các khách hàng đầu tiên đăng ký.
Từ 1 tới 5 trên tổng số 5 kết quả

Đề tài: Websocket của microsoft và websocket tự viết dự trên TCP

  1. #1
    Ngày gia nhập
    05 2010
    Bài viết
    350

    Mặc định Websocket của microsoft và websocket tự viết dự trên TCP

    - Xin chào cả nhà. Độ này mình đang có hứng viết 1 base server.

    Mình triển khai websocket đầu tiên trên base này. Nhưng khi lọ mọ đủ đường thì nhận thấy nếu dùng tcp mà accept kết nối thì rất chậm. Dùng cả alchemy websocket để thử nhưng vẫn chậm.
    Tối đa cũng chỉ 1 giây 1 kết nối. Làm đủ mọi cách nhưng vẫn không nhanh nên dc.
    Nhưng khi chuyển sang dùng websocket của microsoft(chạy trên 4.5, iis 8) thì thấy kết nối rất nhanh. Gần như thực hiện kết nối là bên server nhận thông báo oke luôn
    Có bạn nào đã có kinh nghiệm làm về cái này chưa vậy có thể giải đáp giúp mình không.
    Cảm ơn các bạn
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.
    http://ghostdownload.net/ hỗ trợ download video từ youtube, facebook, bing, vimeo, zingmp3 v.v.v

  2. #2
    Ngày gia nhập
    03 2009
    Bài viết
    128

    Bạn nói rõ xem websocket của microsoft là thư viện của window hay là thư viện của .net
    Còn code bạn tự viết là dùng API của window hay dùng API của .net

  3. #3
    Ngày gia nhập
    05 2010
    Bài viết
    350

    Websocket là thư viện của .net lấy thông qua nuget, tên thư viện là thế này "Microsoft.WebSockets".

    Còn code của mình là dùng api của .net.

    Mình đã thử thêm cả suppersocket thấy nó chấp nhận kết nối cũng rất chậm, tối đa 1 giây cũng chỉ được 1 connection. Không nhanh như thư viện của thằng .NET, thư viện của thằng .net có 1 nhược điểm là phải chạy trên .net 4.5, iis8, mình ghét 2 điều này.
    http://ghostdownload.net/ hỗ trợ download video từ youtube, facebook, bing, vimeo, zingmp3 v.v.v

  4. #4
    Ngày gia nhập
    01 2013
    Bài viết
    1,479

    ^ Dự là để chống DDoS.

  5. #5
    Ngày gia nhập
    05 2010
    Bài viết
    350

    Đây là code của mình test, thấy rất chậm

    Visual C# Code:
    1. class Connection
    2.     {
    3.         byte[] buffer = new byte[1024];
    4.         Socket socket;
    5.         bool IsAuthencation;
    6.         public Connection(Socket socket)
    7.         {
    8.             this.socket = socket;
    9.             socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(OnReceive), null);
    10.         }
    11.  
    12.         void OnReceive(IAsyncResult result)
    13.         {
    14.             try
    15.             {
    16.                 int count = socket.EndReceive(result);
    17.                 if (count != 0)
    18.                 {
    19.                     if (!IsAuthencation)
    20.                     {
    21.                         byte[] tmp = new byte[count];
    22.                         Array.Copy(buffer, 0, tmp, 0, count);
    23.                         string Request = Encoding.UTF8.GetString(tmp);
    24.                         if (Request.Contains("GET"))
    25.                         {
    26.                             if (!IsAuthencation)
    27.                             {
    28.                                 int indexStart = Request.IndexOf("Sec-WebSocket-Key: ");
    29.                                 int indexEnd = Request.IndexOf("Sec-WebSocket-Version:");
    30.                                 string key = Request.Substring(indexStart + 19, indexEnd - indexStart - 21);
    31.                                 string magic = string.Concat(key, "258EAFA5-E914-47DA-95CA-C5AB0DC85B11");
    32.                                 string base64 = "";
    33.                                 using (SHA1 sha1 = SHA1.Create())
    34.                                 {
    35.                                     byte[] bufferMagic = sha1.ComputeHash(Encoding.UTF8.GetBytes(magic));
    36.                                     base64 = Convert.ToBase64String(bufferMagic);
    37.                                 }
    38.  
    39.                                 Byte[] response = Encoding.UTF8.GetBytes("HTTP/1.1 101 Switching Protocols" + Environment.NewLine
    40.                                     + "Connection: Upgrade" + Environment.NewLine
    41.                                     + "Upgrade: websocket" + Environment.NewLine
    42.                                     + "Sec-WebSocket-Accept: " + base64
    43.                                     + Environment.NewLine
    44.                                     + Environment.NewLine);
    45.                                 socket.BeginSend(response, 0, response.Length, SocketFlags.None, new AsyncCallback(OnSend), null);
    46.                                 IsAuthencation = true;
    47.                             }
    48.                         }
    49.                     }
    50.                     socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(OnReceive), null);
    51.                 }
    52.                 else
    53.                 {
    54.                     // disconnect
    55.                 }
    56.             }
    57.             catch (Exception)
    58.             {
    59.                
    60.             }
    61.         }
    62.  
    63.         void OnSend(IAsyncResult result)
    64.         {
    65.             try
    66.             {
    67.                 socket.EndSend(result);
    68.             }
    69.             catch (Exception)
    70.             {
    71.                
    72.             }
    73.         }
    74.  
    75.     }
    76.     class Program
    77.     {
    78.         static List<Connection> clients;
    79.         static Socket socket;
    80.  
    81.         static void Main(string[] args)
    82.         {
    83.             clients = new List<Connection>();
    84.             socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    85.             IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, 30000);
    86.             socket.Bind(endPoint);
    87.             socket.Listen(0);
    88.             socket.BeginAccept(new AsyncCallback(AcceptAsync), null);
    89.             Console.ReadLine();
    90.         }
    91.  
    92.         static void AcceptAsync(IAsyncResult result)
    93.         {
    94.             Console.WriteLine("a new connection");
    95.             Socket s = socket.EndAccept(result);
    96.             clients.Add(new Connection(s));
    97.             socket.BeginAccept(new AsyncCallback(AcceptAsync), null);
    98.         }
    99.  
    100.        
    101.     }

    Các bạn dùng lệnh này để test thử tốc độ connect
    var socket = new WebSocket("ws://localhost:30000");

    Rùa vãi chưởng
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.
    http://ghostdownload.net/ hỗ trợ download video từ youtube, facebook, bing, vimeo, zingmp3 v.v.v

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn