2013-04-22 21 views
5

Làm thế nào để quảng bá thông điệp từ chỉ có một khách hàng khác với Atmosphere (Meteor)? Tôi đã hiện thực này dựa trên thiên thạch hướng dẫnBroadcast để chỉ có một khách hàng với Atmosphere

@Override 
public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException { 
    Meteor.build(req).addListener(new AtmosphereResourceEventListenerAdapter()); 
} 

@Override 
public void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException { 
    String body = req.getReader().readLine().trim(); 
    //some DAO lookups - here I would like to say I want to broadcast only to concrete client 
    BroadcasterFactory.getDefault().lookup(DefaultBroadcaster.class, "/*").broadcast(UserDAO.getInstance().getUser(name)); 
} 

Tôi biết điều đó là có lẽ câu hỏi ngớ ngẩn nhưng tôi không tìm thấy bất kỳ thông tin nào về chủ đề này, vì vậy tôi hỏi ở đây:) Cảm ơn mọi lời khuyên.

Trả lời

3

Một giải pháp tôi tin rằng: cho adressing chỉ có một khách hàng, bạn không cần phải phát sóng, bạn có thể chỉ làm điều này:

 try 
    { 
     r.getResponse().write(message); 
    } 
    catch(IllegalStateException e) 
    { 
     logger.error("Could not send message through atmosphere " + userId); 
    } 

trong đó r là tài nguyên mà bạn có thể ghi nhớ trong chương trình của mình.

+0

Tôi đang lưu 'AtmosphereResource' trong Bản đồ tĩnh trong một lớp khác. Sau đó lặp lại chúng và gọi phương thức 'write' mà bạn đã hiển thị, nhưng máy khách sẽ không nhận được gì cả. – kiltek

+0

@kiltek nó đã được một thời gian nhưng nó có khả năng là giải pháp này hoạt động một chút giống như một phiên http. Vì vậy, bạn không thể giữ nó trong một thời gian khác, chỉ cần sử dụng nó trong "phiên" – unludo

0
BroadcasterFactory.getDefault().lookup(atmosphereResource.uuid()).broadcast('something'); 
+0

Điều này đã không được chấp nhận và bây giờ ném ra hoàn toàn. – kiltek

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