ملتوية و Websockets: ما وراء الصدى
-
25-09-2019 - |
سؤال
في فضولي المستمر حول WebSockets ، ألاحظ اتجاهًا:
يبدو أن "Hello World" لكون WebSocket ، على الأقل في الوقت الحالي ، هو وظيفة "Echo". أي أن التطبيق الموضح هو عادة ، "أرسل شيئًا ، أتلقى شيئًا ما."
على الرغم من إظهار أن البروتوكول يعمل بشكل مناسب ، فإن هذا المثال يوضح فقط نفس النوع من الاتصالات التي تتيحها دورة الطلب / الاستجابة التقليدية.
على سبيل المثال ، العرض التوضيحي الوحيد (على جانب الخادم) الذي يمكنني العثور عليه من twisted.web.websockets هو ما يلي:
import sys
from twisted.python import log
from twisted.internet import reactor
from twisted.web.static import File
from twisted.web.websocket import WebSocketHandler, WebSocketSite
class Echohandler(WebSocketHandler):
def frameReceived(self, frame):
log.msg("Received frame '%s'" % frame)
self.transport.write(frame + "\n")
def main():
log.startLogging(sys.stdout)
root = File(".")
site = WebSocketSite(root)
site.addHandler("/ws/echo", Echohandler)
reactor.listenTCP(8080, site)
reactor.run()
if __name__ == "__main__":
main()
كيف يمكنني بدلاً من ذلك فحص قدرة "الدفع" هنا؟ أي كيف يمكنني ترك مأخذ توصيل الويب مفتوحًا ، ثم في وقت لاحق ، في وقت ما تم تحديده بحدوث بعض الأحداث ، إرسال رسالة عبر WebSocket ، والتي يتأثر محتوى هذا الحدث أيضًا؟
(قد يعتبر المهتمين بهذا السؤال أيضًا هذا السؤال الذي طرحته قبل بضعة أيام: القيام بحركات مع websockets و python / django ( / twisted؟))
المحلول 2
استخدام هندريكس, ، أوضحت كيفية إعداد تطبيق ويب في حديث في Django-Nyc يستخدم WebSockets لدفع الرسائل من خادم Telnet إلى صفحة ويب.
نصائح أخرى
هذا مثال على الصدى المحدث الذي سيكون بدلاً من مجرد رد فعل ، يكون استباقيًا.
class ChattyHandler(WebSocketHandler):
def connectionMade(self):
self.transport.write('oh hai\n')
self.saysomething()
def saysomething(self):
self.transport.write('still there?\n')
reactor.callLater(5, self.saysomething)
لسوء الحظ ، Websockets من https://github.com/rlotun/txwebsocket/ لا يبدو أن لديه طريقة ConnectionMade () ، وبدلاً من ذلك ، فإن الشيء الوحيد الذي يمكنك ربطه هو __فيه__. عادةً ما يمكنك تجاوز ConnectionMade () إذا كان بروتوكول ملتوية "طبيعي". -ثمن في المنبع