zoukankan      html  css  js  c++  java
  • Geventsocketio documentation — geventsocketio 0.3.1 documentation

    Gevent-socketio documentation — gevent-socketio 0.3.1 documentation

    Gevent-socketio documentation

      Introduction

      Socket.IO is a WebSocket-like abstraction that enables real-time
      communication between a browser and a server. gevent-socketio is a
      Python implementation of the protocol.

      The reference server implementation of Socket.IO runs on Node.js and was
      developed by LearnBoost. There are now server implementations in a
      variety of languages.

      One aim of this project is to provide a single gevent-based
      API that works across the different WSGI-based web frameworks out
      there (Pyramid, Pylons, Flask, web2py, Django, etc...). Only ~3 lines
      of code are required to tie-in gevent-socketio in your framework.
      Note: you need to use the gevent python WSGI server to use
      gevent-socketio.

      Namespaces: since you mostly have one websocket/socket.io
      endpoint per website, it is important to be able to namespace the
      different real-time activities of the different pages or parts of
      your site, just like you need routes to map URLs to different parts
      of your code. The Socket.IO 0.7+ namespaces are a welcome addition,
      and if you don’t use Socket.IO, you’ll probably end-up writing your
      own namespacing mechanism at some point.

      Named events: To distinguish the messages that are coming and
      going, you most probably want to give them some name. Here again, not
      using Socket.IO, you will find yourself implementing a way to tag your
      packets with names representing different tasks or actions to
      perform. With Socket.IO 0.6 or with normal WebSockets, you would
      probably encode a JSON object with one of the keys that is reserved
      for that (I used {"type": "submit_something"}. Socket.IO 0.7+
      implements named events, which put that information in a terse form on
      the wire. It also allows you to define callbacks, that can be
      acknowledged by the other endpoint, and then fire back your function
      with some return parameters. Something great for RPC, that you’d need
      to implement yourself the moment you need it.

      Transports: One of the main feature of Socket.IO is the
      abstraction of the transport, that gives you real-time web support
      down to Internet Explorer 6.0, using long-polling methods. It will
      also use native WebSockets when available to the browser, for even
      lower latencies.

      This implementation covers nearly all the features of the Socket.IO
      0.7+ (up to at least 0.9.1) protocol, with events, callbacks. It adds
      security in a pythonic way with granular ACLs (which don’t exist in
      the Node.js version) at the method level. The project has several
      examples in the source code and in the documentation. Any addition
      and fixes to the docs are warmly welcomed.

      Concepts

      In order to understand the following documentation articles, let’s
      clarify some of the terms used:

      A Namespace is like a controller in the MVC world. It encompasses
      a set of methods that are logically in it. For example, the
      send_private_message event would be in the /chat namespace, as
      well as the kick_ban event. Whereas the scan_files event
      would be in the /filesystem namespace. Each namespace is
      represented by a sub-class of BaseNamespace. A simple
      example would be, on the client side (the browser):

      var socket = io.connect("/chat");
      

      having loaded the socket.io.js library somewhere in your <head>.
      On the server (this is a Pyramid example, but its pretty much the same
      for other frameworks):

      from socketio.namespace import BaseNamespace
      
      class ChatNamespace(BaseNamespace):
          def on_chat(self, msg):
              self.emit('chat', msg)
      
      def socketio_service(request):
          socketio_manage(request.environ, {'/chat': ChatNamespace},
                          request)
          return "out"
      

      Here we use socketio.socketio_manage() to start the Socket.IO
      machine, and handle the real-time communication.

      You will come across the notion of a Socket. This is a virtual
      socket, that abstracts the fact that some transports are long-polling
      and others are stateful (like a Websocket), and exposes the same
      functionality for all. You can have many namespaces inside a Socket,
      each delimited by their name like /chat, /filesystem or
      /foobar. Note also that there is a global namespace, identified
      by an empty string. Some times, the global namespace has special
      features, for backwards compatibilty reasons (we only have a global
      namespace in version 0.6 of the protocol). For example, disconnecting
      the global namespace means disconnect the full socket. Disconnecting
      a qualified namespace, on the other hand, only removes access to that
      namespace.

      The Socket is responsible from taking the packets, which are, in
      the realm of a Namespace or a Socket object, a dictionary that
      looks like:

      {"type": "event",
       "name": "launch_superhero",
       "args": ["Superman", 123, "km", {"hair_color": "brown"}]}
      

      These packets are serialized in a compact form when its time to put
      them on the wire. Socket.IO also has some optimizations if we need to
      send many packets on some long-polling transports.

      At this point, if you don’t know gevent, you probably will want to
      learn a bit more about it, since it is the base you will be working
      on:

      Getting started

      Until we have a fully-fledged tutorial, please check out our example
      applications and the API documentation.

      See this doc for different servers integration:

      Examples

      The gevent-socketio holds several examples:

      https://github.com/abourget/gevent-socketio/tree/master/examples

      • chat.py is a bare-bone WSGI app with a minimal socketio integration

      • chatter2 is a simple chat application, showing off the minimal setup

      • chatter3 is an app using socket.io, backbone.js and redis for pubsub

      • chatter4 is chatter3 with persistence added.

      • testapp is the app we use to test the different features, so there

        are a couple of more advanced use-cases demonstrated there

      pyvore is an application that was developed to serve as real-time
      chat in conferences like the PyCon:

      This app is a Django tic-tac-toe application that uses the latest
      gevent-socketio:

      API docs

    • 相关阅读:
      设计模式-装饰模式(Decorator Pattern)
      死锁分析与解决
      事务原理与开发
      SQL注入与防范
      数据库连接池
      JDBC基础知识
      算法复习
      计算机网络基础知识
      Caused by: org.gradle.api.internal.plugins.PluginApplicationException: Faile
      手写算法
    • 原文地址:https://www.cnblogs.com/lexus/p/2493654.html
    Copyright © 2011-2022 走看看