मैं प्ले 2 और जावा के साथ एक वेबसाकेट आधारित समाधान को लागू करने की कोशिश कर रहा हूं। वर्तमान में मैं समवर्ती प्रबंधन के लिए Actor Model का उपयोग नहीं कर रहा हूं। इसके बजाए, यह सिर्फ handling the WebSockets using callbacks है।जावा - प्ले 2 वेबसाकेट कार्यान्वयन के लिए आवश्यक अभिनेता हैं?
समस्या यह है कि सर्वर कई ग्राहकों को संदेशों को 'प्रसारण' करने में असमर्थ है। उदाहरण के लिए, क्लाइंट के माध्यम से एक क्रिया ट्रिगर होने के बाद मुझे एक सरल अधिसूचना प्राप्त करने के लिए सभी सक्रिय ब्राउज़र सत्रों की आवश्यकता होती है। इसके बजाय, मैं इसे एक क्लाइंट सत्र के लिए अनुकरण करने में सक्षम हूं। असल में, यह सिर्फ नियमित अजाक्स अनुरोध/प्रतिक्रिया परिदृश्य के रूप में कार्य करता है।
मेरा अनुमान है कि प्ले 2 & जावा के साथ वेबसाकेट समाधान सरल कॉलबैक के साथ जावा सभी कनेक्टेड क्लाइंट ब्राउज़र पर संदेशों को प्रसारित करने में सक्षम नहीं है।
कॉलबैक सर्वर कोड
public static WebSocket<String> heartUpdate() {
return new WebSocket<String>() {
public void onReady(final WebSocket.In<String> in,
WebSocket.Out<String> out) {
in.onMessage(new Callback<String>() {
@Override
public void invoke(String event) throws Throwable {
Product product = Product.find.byId(Long.decode(event));
// Other business stuff
out.write(entity.id + " " + decimalValue);
}
});
in.onClose(new Callback0() {
@Override
public void invoke() throws Throwable {
}
});
out.write(DELIM_USERID_REP);
}
};
}
मार्गों प्रविष्टि
GET /repsocket controllers.Application.heartUpdate
क्लाइंट साइड
<script>
// Onto the WebSockets now
var WS = window['MozWebSocket'] ? MozWebSocket : WebSocket;
var socket = new WS("@routes.Application.heartUpdate.webSocketURL(request)");
var receiveEvent = function(event) {
alert(event.data);
// Notification badge visible with a common text
$('#notify').text(event.data);
$('#notify').addClass('visible');
}
$('#heart').click(function(e) {
e.preventDefault();
socket.send(@product.id);
});
socket.onmessage = receiveEvent;
</script>
में उपर्युक्त मामला, क्लाइंट ट्रिगर करने वाला कार्य वह है जो सफलतापूर्वक सर्वर से संदेश प्राप्त करता है, जबकि कोई अन्य ब्राउज़र सत्र नहीं करता है।
मैं जावा & वेबसाकेट्स के साथ Play2 के साथ गठबंधन किए गए किसी दस्तावेज़ को खोजने में विफल रहा जो सभी जुड़े सक्रिय ग्राहकों के साथ लगातार संचार बनाए रखने के लिए अभिनेताओं के अनिवार्य उपयोग का सुझाव देता है।
प्रश्न: क्या जावा के साथ Play2 में वेबसाकेट को सक्रिय सक्रिय सत्रों में संदेश प्रसारित करने के लिए अभिनेता मॉडल के साथ कार्यान्वित किया जाना चाहिए?
संपादित करें: नीचे स्क्रीनशॉट ब्राउज़रों के 2 राज्यों को दर्शाता है जो करने के लिए मैं 2 मान्य उपयोगकर्ता क्रेडेंशियल्स का उपयोग करने के लिए प्रवेश कर लिया है।
आदर्श रूप से, सर्वर से वेबसाकेट की प्रतिक्रिया दोनों ब्राउज़रों पर एक ही अधिसूचना बैज बनाना चाहिए।
आपके पास क्या त्रुटि है? –
@nikpon कोई त्रुटि नहीं, सर्वर से संदेश सिर्फ 1 ब्राउज़र सत्र में दिखाई देता है - जिसने अनुरोध को ट्रिगर किया है और किसी अन्य कनेक्ट क्लाइंट सत्र में नहीं – PopoFibo
आपको ब्राउज़र का सत्र कैसे मिला? –