سؤال

في فضولي المستمر حول 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 () إذا كان بروتوكول ملتوية "طبيعي". -ثمن في المنبع

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top