2012-06-22 39 views
7

Tôi đang làm việc trên một cặp máy khách-khách hàng, nơi máy khách đa luồng thực hiện hàng nghìn lần gọi của máy chủ mỗi giây và ưu tiên đầu tiên là đạt được độ trễ tối thiểu. Thông lượng cũng phải cao. Cả máy khách và máy chủ đều được viết bằng Java, ngữ nghĩa giao tiếp khá đơn giản (các hoạt động đặt/nhận).Thư viện mạng Java có độ trễ thấp và thấp?

Thư viện/khung mạng Java tốt nhất cho các yêu cầu này là gì? Các máy chủ như Tomacat/Jetty có vẻ nặng. Tôi đang suy nghĩ về MINA hoặc Netty, nhưng tôi không chắc chắn rằng những lib không đồng bộ này sẽ cung cấp độ trễ thấp ổn định dưới khối lượng công việc nặng.

+0

Bạn đang nói về "khách hàng [..] thực hiện hàng nghìn lời gọi". Bạn thực sự chỉ có * một * (hoặc rất ít khách hàng)? Khung dựa trên java nio (netty/mina) tỏa sáng khi họ đang xử lý rất nhiều khách hàng (kết nối đồng thời), nhưng điều đó không nhất thiết có nghĩa là những khách hàng này thực hiện nhiều lời gọi. tomcat sử dụng http, trong khi mina/netty được hướng đến việc sử dụng tcp trực tiếp hơn. – MartinK

+0

Có, tôi chỉ có một vài ứng dụng khách và mỗi ứng dụng có một số lượng chủ đề tương đối nhỏ (~ 20). Vì vậy, tổng số kết nối không phải là cực kỳ cao. – user1128016

+0

Hầu như tất cả các thư viện mạng không chặn đều tạo ra rất nhiều rác khi chúng xử lý tin nhắn. Nó trở nên rất khó để có được thời gian thực khi bạn có sự can thiệp GC. Tôi đề nghị bạn hãy xem [CoralReactor] (http://www.coralblocks.com/index.php/category/coralreactor/), tạo ra không rác. – rdalmeida

Trả lời

1

Nếu bạn cần hiệu suất cực cao và thông lượng, tôi khuyên bạn nên sử dụng ổ cắm thô (xem Socket và ServerSocket - có thể có phiên bản nio). Điều này sẽ giải phóng bạn khỏi chi phí chứa trong HTTP và các giao thức khác

+2

Socket và ServerSocket không phải là 'ổ cắm thô'. Chúng là các cổng TCP. Ổ cắm thô không thể được sử dụng từ Java thuần túy, – EJP

2

Tôi đề nghị bạn thử dùng khung kryonet.

2

Nếu bạn muốn giao tiếp trên cùng một máy, bạn có thể thử một cái gì đó như Java Chronicle có thể hỗ trợ hơn một triệu thư liên tục mỗi giây với thời gian chuyến đi vòng một micro giây.

Nếu bạn muốn có độ trễ thấp giữa các máy, bạn cần xem xét kỹ phần cứng của mình. Đối với phần cứng hàng hóa, độ trễ chuyến đi của bạn sẽ là 100 micro giây/giây. Với phần cứng chuyên dụng, bạn đang tìm kiếm gần hơn 20 micro giây.

Hoặc bạn có thể giao tiếp trên cùng một hộp và nhận được độ trễ thấp hơn nhiều. ;)

2

Bạn cũng có thể thử Jocket. Nó chia sẻ một số khái niệm với Java Chronicle nhưng được trực tiếp nhắm mục tiêu thay thế việc triển khai Socket chuẩn.

Độ trễ RTT dưới micro giây cho một bàn bóng bàn giữa các quá trình.

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