Đọc các bài C10K và xem họ giải thích sẽ hiểu hơn.
Về tạo socket có tốn tài nguyên không thì câu trả lời chắc chắn là có.
Trong Java có BlockingIO và NIO vậy ví dụ với websocket đi:
BockingIO: Sử dụng 1thread/connection => 1tr thread thì riêng Mem cho bộ nhớ đã là 1GB rồi chưa tính đến mem cho các phần xử lý khác.
NIO: Với NIO thì mỗi connection thì nó đơn giản chỉ là Object MetaData
Mã:
public class Connection {
Reader r;
Writer w;
}
Nhiều connection có thể được xử lý bởi 1 thread được gọi là IO thread hoặc EventLoop thread. Với websocket việc kết nối phải giữ liên tục nhưng dữ liệu trao đổi không nhiều thì NIO đặc biệt hiệu quả. Để dễ hiểu thì IO thread sẽ foreach qua List Connection và check Reader.hasData() thì xử lý còn không thì đi tiếp.
Vậy với NIO thì có thể dùng websocket để xử lý vài triệu connection ok, nhưng về tổng thể ứng dụng thì còn nhiều vấn đề khác nữa.