2013-06-03 24 views
7

Có thể để máy chủ gửi tin nhắn đến tất cả các khách hàng được kết nối mà không phải đợi bất kỳ hành động nào từ họ không? Hãy để tôi giải thích nó :-) Tôi đã đọc các docs/examples và tôi đã tìm thấy không có gì mà satifies nhu cầu của tôi: dòng chảy là luôn luôn giống nhau; khách hàng kết nối (ví dụ: cuộc gọi GET đến API còn lại), kết nối bị tạm ngừng và cho đến khi nhận được cuộc gọi API mới (ví dụ: cuộc gọi POST), máy chủ chỉ cần đợi (hoặc ít nhất đây là những gì tôi đã hiểu). Trường hợp sử dụng của tôi khá khác: Tôi muốn máy chủ gửi một số "thông báo" khi dữ liệu mới có sẵn. Đây sẽ là trường hợp của tôi sử dụng (khá simplifed):Bầu không khí Jersey - Thông điệp máy chủ

  1. khách hàng A kết nối với máy chủ
  2. kết nối bị đình chỉ vì không có dữ liệu mới có sẵn tại thời điểm
  3. Các máy chủ được thông báo dữ liệu mới có sẵn từ một bên ngoài nguồn và chương trình phát sóng nó cho khách hàng Một
  4. đến bước 2

những gì tôi đã đạt được cho đến nay là nhận được kết nối thiết lập thành công. Bước tiếp theo là giải quyết vấn đề máy chủ này. Tôi phải nói công nghệ này là hoàn toàn mới đối với tôi vì vậy tôi có thể hiểu lầm một cái gì đó hoạt động như thế nào. Nếu đó là trường hợp, hãy cho tôi biết!

Đây là chồng của tôi:

  • mùa xuân 3.2.0 CHÍ
  • Jersey 1,8
  • Atmosphere Jersey 1.0.13
  • Tomcat 7.0.40

Cảm ơn tất cả các bạn trong nâng cao!

UPDATE: Sau khi làm theo this tôi nhận được cảnh báo này, mà tôi không có ý tưởng làm thế nào để thoát khỏi:

2013-06-04 09:40:36,284 WARN [org.atmosphere.cpr.AtmosphereFramework] - Failed using comet support: org.atmosphere.container.Tomcat7AsyncSupportWithWebSocket, error: Tomcat failed to detect this is a Comet application because context.xml is missing or the Http11NioProtocol Connector is not enabled. 
If that's not the case, you can also remove META-INF/context.xml and WEB-INF/lib/atmosphere-compat-tomcat.jar Is the Nio or Apr Connector enabled? 
2013-06-04 09:40:36,285 WARN [org.atmosphere.cpr.AtmosphereFramework] - Using org.atmosphere.container.Tomcat7BIOSupportWithWebSocket 

Tôi đi theo cấu trúc ứng dụng nhận xét here, vì vậy đây không phải là một vấn đề. Tôi đã nhận thấy rằng bằng cách thay đổi việc chuyển sang "websocket" thay vì "long-polling" sẽ không có lỗi. Máy chủ cuối cùng gửi dữ liệu khó khăn :)

Trả lời

0

Tôi đã theo liên kết của bạn và sửa đổi mã một chút.

Khi bạn đang ở trong bước 3 "Các máy chủ được thông báo dữ liệu mới có sẵn từ một nguồn bên ngoài và chương trình phát sóng nó cho khách hàng A", bạn phải viết một dòng như thế này:

BroadcasterFactory.getDefault().lookup("/*").broadcast(response); 

Lúc đầu, tôi đã sử dụng TextMessage nhận được từ Hàng đợi ActiveMQ nhưng tôi nhận được lỗi này, vì vậy tôi đã sử dụng một lớp Jackson làm phản hồi đối tượng và mọi thứ hoạt động tốt.

NGHIÊM TRỌNG: Một nhà văn nội dung thư cho Java lớp org.apache.activemq.command.ActiveMQTextMessage, và loại Java lớp org.apache.activemq.command.ActiveMQTextMessage, và MIME loại phương tiện application/json không được tìm thấy jun 03, 2014 11:32:21 AM com.sun.jersey.spi.container.ContainerResponse viết NGHIÊM TRỌNG: Các nhà văn nội dung thư đã đăng ký phù hợp với loại phương tiện MIME là: application/json (JSONJAXBElementProvider, JSONArrayProvider, JSONObjectProvider, JSONRootElementProvider, JSONListElementProvider, ...)

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