Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: Xử lý high traffic để gửi dữ liệu qua socket

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

    Mặc định Xử lý high traffic để gửi dữ liệu qua socket

    Chào các bác, em mới nhập môn về lập trình C mà tự nhiên bị vớ phải bài toán về high traffic cũng khoai phết (ít ra là đối với em). Bài toán thế này các bác ạ:
    - Em có đầu vào là một lượng dữ liệu vào là các gói tin lưu lượng khá lớn chạy liên tục. Em dùng wireshark để bắt và bóc tách gói tin. Cái này em bóc dc rồi, lấy được dữ liệu cần rồi tuy nhiên sau đó em muốn bắn qua socket và liên tục gửi đi. Quá trình này cứ liên tiếp. Nếu bình thường em thử trên máy thì ko sao nhưng sau đó khi đưa vào server mà chạy ngoài mạng thì lưu lượng lớn quá nên có vẻ dùng 1 socket cho 1 gói tin là quá phí vì theo em biết thời gian mở và đóng socket chiếm khá nhiều thời gian. Thế nên em đang định dùng 1 queue để nhét các dữ liệu đến vào đó và bên socket thì cứ bắn đi, vài gói tin 1 lúc cho đỡ công mở và đóng socket. Em biết nếu làm thế thì phải dùng multi thread nhưng em mới nhập môn không biết viết code sẽ như thế nào, chỉ hiểu ý tưởng thế thôi cũng chưa làm high traffic hay xử lý deadloack thế nào. Các bác có ai có sample hoặc có ý tưởng gì để thực hiện ở mức coding thì giúp em với. Đa tạ đa tạ.

  2. #2
    Ngày gia nhập
    07 2011
    Bài viết
    25

    Chắc ý bạn muốn dùng multithread để 1 thread thực hiện quá trình gửi dữ liệu,1 thread đưa dữ liệu vào Queue và control cái Queue này chăng?
    Nếu vậy,ở phần Thread control queue bạn nên dùng 1 Threadpool.ThreadPool là 1 khái niệm chứ không phải 1 lớp đã được implement sẵn trên C++.Nó thực ra cũng là 1 Queue như bạn nói thôi.Khi nào bên socket gửi hết gói hiện tại thì lại lấy từ queue ra đển gửi tiếp đến khi nào queue rỗng thì thôi.

  3. #3
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    @hoangson: Có vẻ như bạn chỉ mở 1 socket để gởi đi, do đó app của bạn sẽ có 3 thread chính như sau.

    Thread 1:
    while(true){
    Object data = GetData();
    ProcessData(data);
    AddDataToQueue(data);
    }
    Thread 2:
    OpenSocket();
    While(true){
    Object data = GetDataFromQueue();
    SendData(data)
    }
    CloseSocket();

    Hiện tại gởi tcp/udp qua socket thì rất nhanh, nếu vấn chưa giải quyết được vấn đề của bạn thì bạn nêu rõ ứng dụng của mình hơn chút, rồi theo mô hình trên mình dựng thêm các instance hoặc mở thêm đầu nhận socket là đc.

Các đề tài tương tự

  1. Máy lọc nước RO High Tech Filter
    Gửi bởi nuoclocmt trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 06-05-2013, 10:59 AM
  2. Kỹ thuật C socket ( sys/socket.h) và GET (sau khi telnet + tên host)
    Gửi bởi tuanc trong diễn đàn Thắc mắc lập trình C/C++ trên Linux
    Trả lời: 14
    Bài viết cuối: 22-08-2012, 04:24 PM
  3. Làm high scores cho game C# như thế nào?
    Gửi bởi long trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 23-03-2010, 09:46 AM

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