मुझे यकीन नहीं है कि मुझे डिफ़ॉल्ट टाइम-आउट का अनुभव हो रहा है (क्या मैं इसे कहीं भी सेट कर सकता हूं?), लेकिन शायद मुझे कुछ याद आ रहा है। जब एक ग्राहक का ब्राउज़र वेबसाइकिल कनेक्शन स्थापित करता है, तो मैं दृढ़ता रखता हूं। फिर, डिस्कनेक्ट पर, मैं उस निरंतर वस्तु को हटा देता हूं। काफी सरल। डिस्कनेक्ट सामान्य रूप से ट्रिगर किया जाता है जब एक ग्राहक ब्राउज़र बंद कर देता है, लेकिन नहीं जब ग्राहक (पर एक मैकबुक प्रो परीक्षण, नहीं है कि इस बात चाहिए) अपने वाई-फाई कनेक्शन बंद हो जाती है।वेबसाइट्स 'हार्ड' डिस्कनेक्ट स्पष्ट नहीं है?
स्काला नियंत्रक में, मैं हर in
संदेश लॉग इन करने रहा हूँ, लेकिन कुछ भी नहीं जब वाई-फाई बंद कर दिया है के माध्यम से आता (docs से, मैं एक EOF उम्मीद करेंगे?)।
मुझे लगता है कि यह एक बग, जैसा कि मैंने कैसे की व्याख्या WS protocolसे लिया सर्वर को बंद करना होगा WebSocket कनेक्शन, और समस्या लॉग इन करना चाहिए होना चाहिए। लेकिन बाद वाला नहीं होता है।
val in = Iteratee.foreach[String](x => {
logger.info("Websocket msg: " + x)
// expect EOF?
x match {
case "persist" => // persist some object
}
}).mapDone { x =>
// delete my persisted object (never happens unless browser/tab closed)
}
क्या किसी ने इसका अनुभव किया है? मैंने एक सरल नियंत्रक और कुछ ऐसा करने की कोशिश की है जो मेरी कॉन्फ़िगरेशन से मेल खाती है। नीचे ws3
या ws2
नीचे नियंत्रक चाल करते हैं। प्ले! नीचे दिए गए कोड:
object Application extends Controller {
private def ws(out: PushEnumerator[String]) = {
Logger.logger.info("ws()")
val in = Iteratee.foreach[String](x => {
Logger.logger.info("Websocket msg: " + x)
try {
x match {
case "persist" => Logger.logger.info("PERSIST")
}
} catch {
case e: Exception => {
Logger.logger.info("NOT RECOGNIZED COMMAND, NO PERSIST")
}
}
}).mapDone { x =>
Logger.logger.info("STOP PERSIST")
}
in
}
def ws2() = WebSocket.using[String] { request =>
Logger.logger.info("ws2()")
val out = Enumerator.imperative[String]()
val in = ws(out)
(in, out)
}
def ws3() = WebSocket.using[String] { request =>
Logger.logger.info("ws3()")
val out = Enumerator.imperative[String]()
val in = Iteratee.foreach[String](x => {
Logger.logger.info("Websocket msg: " + x)
try {
x match {
case "persist" => Logger.logger.info("PERSIST")
}
} catch {
case e: Exception => {
Logger.logger.info("NOT RECOGNIZED COMMAND, NO PERSIST")
}
}
}).mapDone { x =>
Logger.logger.info("STOP PERSIST")
}
(in, out)
}
def view() = Action { implicit request =>
Ok(views.html.index.render(""))
}
}
दृश्य एक सरल है:
@(message: String) @main("Welcome to Play 2.0") {
@play20.welcome(message) }
<script type="text/javascript" charset="utf-8">
var sock = new WebSocket("ws://192.168.1.120:9001/ws3");
sock.onopen = function(event) {
sock.send('persist');
}
</script>
मार्गों:
GET /ws2 controllers.Application.ws2
GET /ws3 controllers.Application.ws3
GET /view controllers.Application.view
प्रबंधन कुछ ऐसा था जो मुझे डर था। इसे भी मिला - https://code.google.com/p/chromium/issues/detail?id=76358 -। ऐसा लगता है कि यह ढांचे में बनाया गया कुछ होना चाहिए, या कम से कम बात की जानी चाहिए। धन्यवाद! –
इसे पढ़ने के लिए कोई भी - यह "socket.io" सर्वर मेमोरी क्रीप भी इस श्रेणी के अंतर्गत आता है। –