2010-09-16 40 views
5

Tôi đã viết một máy chủ TCPIP thực hiện một FileSystemWatcher và điền vào một hàng đợi với dữ liệu được phân tích cú pháp từ các tệp mới được FSW thu thập.Tôi có nên đóng một ổ cắm (TCPIP) sau mỗi giao dịch không?

Một khách hàng sẽ kết nối với máy chủ này và yêu cầu dữ liệu từ hàng đợi (không có ứng dụng khách nào khác sẽ cần kết nối bất kỳ lúc nào). Nếu không có dữ liệu nào tồn tại, khách hàng sẽ đợi (1 giây) và thử lại.

Cả khách và máy chủ đều được viết không đồng bộ - câu hỏi của tôi là: khách hàng nên tạo một ổ cắm mới cho mỗi giao dịch (bên trong vòng lặp while) hay chỉ để mở ổ cắm (bên ngoài vòng lặp while)?

client.Connect() 

while(bCollectData) 
{ 
    ... communicate ... 

    Thread.Sleep(1000); 
} 

client.Shutdown(SocketShutdown.Both); 
client.Close(); 

Trả lời

6

Tôi khuyên bạn nên để ổ cắm mở và thậm chí tốt hơn để chặn nó trên máy chủ, để bạn không phải làm Thread.Sleep. Khi máy chủ sẽ có một số dữ liệu, anh ta sẽ gửi tin nhắn cho khách hàng.

Mã sẽ giống như thế này

while(bCollectData) 
{ 
    _socket.recv(...); //this line will wait for response from server 
    //... process message and start another wait in the next iteration. 
} 

sử dụng phương pháp này bạn sẽ nhận được tất cả các thư ngay lập tức và tránh các thông điệp cần thiết gửi giữa client và server (các thông điệp đó trở lại máy chủ mà không có dữ liệu).

1

Tôi sẽ để ổ cắm mở ngoài vòng lặp, kết nối lại mọi lần lặp lại có vẻ như lãng phí tài nguyên.

1

Tôi sẽ không đóng ổ cắm. Mỗi khi bạn kết nối bạn có một số cái bắt tay.

Các vấn đề liên quan