Hola,

Por lo que necesitas, creo que podrias usar gevent-sockectio [1].

Para ver como funciona mira el código del server [2] y tambien hay un
ejemplo para hacer un chat [3]

En [4] hay un articulo para trabajar con gevent, sockectio y django donde
muestra un código tipo:

from django.http import HttpResponse

buffer = []

def socketio(request):
    socketio = request.environ['socketio']
    if socketio.on_connect():
        socketio.send({'buffer': buffer})
        socketio.broadcast({'announcement': socketio.session.session_id + '
connected'})

    while True:
        message = socketio.recv()

        if len(message) == 1:
            message = message[0]
            message = {'message': [socketio.session.session_id, message]}
            buffer.append(message)
            if len(buffer) > 15:
                del buffer[0]
            socketio.broadcast(message)
        else:
            if not socketio.connected():
                socketio.broadcast({'announcement':
socketio.session.session_id + ' disconnected'})
                break

    return HttpResponse()

Que tambien tiene un bucle infinito leyendo el mensaje desde
socketio.recv(), mas o menos como en tu código

[1] https://bitbucket.org/Jeffrey/gevent-socketio/src
[2]
https://bitbucket.org/Jeffrey/gevent-socketio/src/ed74e0013df2/socketio/server.py
[3]
https://bitbucket.org/Jeffrey/gevent-socketio/src/ed74e0013df2/examples/chat.py
[4]
http://codysoyland.com/2011/feb/6/evented-django-part-one-socketio-and-gevent/


:D
El 15 de agosto de 2012 23:59, Diego Uribe Gamez <
diego.uribe.ga...@gmail.com> escribió:

> Ok yo entiendo y ya lo mire, Gracias, Se que es fuerte pero quiero
> mantener y adaptar la estructura de eventos en python.
>
> El 15 de agosto de 2012 16:48, Alvaro Manrique 
> <sanreikaj.fo...@gmail.com>escribió:
>
> Buenas Tardes;
>>
>>    Perdón si mi respuesta es off-topic pero si te interesa trabajar con
>> javascript y manejar paquetes json para una especie de chat, creo que debes
>> darle un vistazo a node.js, se que es una nueva tecnología pero estuve
>> viendo el manejo de sockets y con unas pocas líneas de código se implementa
>> lo que tu quieres.
>> El 15/08/2012 16:43, "Diego Uribe Gamez" <diego.uribe.ga...@gmail.com>
>> escribió:
>>
>>  mmmm Disculpen que no me hice entender, voy a hablar a nivel
>>> de código y me voy a enfocar en el proyecto que mencione al principio,
>>> la razón de hacerlo de esta manera que la forma en la que funciona y el
>>> problema como la solución para mi proyecto esta en usar jason y Gevent,
>>> porque las consultas van a ser muchas y este sistema de combinado hace que
>>> la pagina chatee con la maquina sin gastar muchos recursos.
>>>
>>> Mi problema es en acondicionar este proyecto a la idea como tal de
>>> chatear con una maquina, me gusta es que tengo mucho del código a la mano y
>>> la idea es adaptarme.
>>>
>>> El código actual:
>>> -----------------------------------------------------------------------
>>> # Datos para la conexion al Socket y la IP que escucharemos
>>> host = '190.145.XXX.XXX'
>>> port = 33XX
>>> buf = 102400
>>> addr = (host, port)
>>> # Creamos el Socket - (INTERNET,UDP)
>>> UDPSock = socket(AF_INET,SOCK_DGRAM)
>>> UDPSock.bind(addr)
>>> # Bucle infinito (PROBLEMA)
>>> while 1:
>>>     # recibir data
>>>     data,addr = UDPSock.recvfrom(buf)
>>> -----------------------------------------------------------------------
>>> Nota: Resulta que yo estoy usando este código para capturar
>>> la información que me envían a mi ip y puerto, el problema es que estoy
>>> usando un bucle infinito para hacerlo y creo que esta mal, adicional
>>> necesitaba que apenas llegara algun dato poder mostrarselo al usuario en la
>>> pantalla, pensando en una solución me encontré con este proyecto y su demo
>>> que es un chat(en python, gevent, jason y javascript), donde para mi una
>>> solución es poder chatear con la maquina o mejor dicho es que apenas la
>>> maquina se comunique la idea es que el usuario pueda ver la información en
>>> tiempo real en la pagina web sin necesidad de recargar la pagina.
>>>
>>> En el código a continuación yo entiendo muchas cosas pero no estoy
>>> seguro de como adaptar mi código actual a la solución del problema.
>>>
>>> message_new() este se encarga de crear nuevos mensajes para los
>>> navegadores usando create_message y lo retorna con un json_response
>>>
>>> message_updates() dice que si no hay un mensaje en cache o que si el
>>> mensaje del navegador(cursor) es igual al ultimo mensaje toca esperar a un
>>> nuevo mensaje self.new_message_event.wait() para luego actualizar
>>>
>>> Código del Chat:
>>> -----------------------------------------------------------------------
>>> import uuid
>>> import simplejson
>>> from django.shortcuts import render_to_response
>>> from django.template.loader import render_to_string
>>> from django.http import HttpResponse
>>> from gevent.event import Event
>>> import settings
>>>
>>>
>>> class ChatRoom(object):
>>>     cache_size = 200
>>>
>>>     def __init__(self):
>>>         self.cache = []
>>>         self.new_message_event = Event()
>>>
>>>     def main(self, request):
>>>         if self.cache:
>>>             request.session['cursor'] = self.cache[-1]['id']
>>>         return render_to_response('index.html', {'MEDIA_URL':
>>> settings.MEDIA_URL, 'messages': self.cache})
>>>
>>>     def message_new(self, request):
>>>         name = request.META.get('REMOTE_ADDR') or 'Anonymous'
>>>         forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
>>>         if forwarded_for and name == '127.0.0.1':
>>>             name = forwarded_for
>>>         msg = create_message(name, request.POST['body'])
>>>         self.cache.append(msg)
>>>         if len(self.cache) > self.cache_size:
>>>             self.cache = self.cache[-self.cache_size:]
>>>         self.new_message_event.set()
>>>         self.new_message_event.clear()
>>>          return json_response(msg)
>>>
>>>     def message_updates(self, request):
>>>         cursor = request.session.get('cursor')
>>>         if not self.cache or cursor == self.cache[-1]['id']:
>>>             self.new_message_event.wait()
>>>         assert cursor != self.cache[-1]['id'], cursor
>>>         try:
>>>             for index, m in enumerate(self.cache):
>>>                 if m['id'] == cursor:
>>>                     return json_response({'messages': self.cache[index +
>>> 1:]})
>>>             return json_response({'messages': self.cache})
>>>         finally:
>>>             if self.cache:
>>>                 request.session['cursor'] = self.cache[-1]['id']
>>>             else:
>>>                 request.session.pop('cursor', None)
>>>
>>> room = ChatRoom()
>>> main = room.main
>>> message_new = room.message_new
>>> message_updates = room.message_updates
>>>
>>> def create_message(from_, body):
>>>     data = {'id': str(uuid.uuid4()), 'from': from_, 'body': body}
>>>     data['html'] = render_to_string('message.html',
>>> dictionary={'message': data})
>>>     return data
>>>
>>> def json_response(value, **kwargs):
>>>     kwargs.setdefault('content_type', 'text/javascript; charset=UTF-8')
>>>     return HttpResponse(simplejson.dumps(value), **kwargs)
>>> -----------------------------------------------------------------------
>>>
>>> Esto un poco por encima lo entiendo, lo que no sabría es como adaptar
>>> mi código actual a message_new?
>>>
>>> Espero haberme hecho entender y ver si pueden darme una idea.
>>>
>>> Gracias.
>>>
>>>
>>> El 14 de agosto de 2012 19:20, Olemis Lang <ole...@gmail.com> escribió:
>>>
>>>> On 8/14/12, Alexandro Colorado <j...@oooes.org> wrote:
>>>> > Si hay sistemas sobre jabber donde puedes crear un chat de grupo
>>>> estilo IRC
>>>> > donde tus servidores se conecten al irse en linea y esten reportando
>>>> cosas
>>>> > originadas de dbus o eventos de tu servidor web.
>>>> > Lo complicado seria la
>>>> > pre-programacion para que puedas responderles con comandos para
>>>> reiniciar,
>>>> > depurar, o resumir procesos.
>>>> >
>>>> > Estos proyecgtos probablemente ya existen es solo de seguir buscando,
>>>> el
>>>> > detalle es saber que realmente quieres lograr.
>>>> >
>>>>
>>>> a ver a ver ... si están hablando d XMPP algo debería aparecer por aquí
>>>> http://xmpp.org/xmpp-protocols/xmpp-extensions/
>>>>
>>>> > 2012/8/14 Diego Uribe Gamez <diego.uribe.ga...@gmail.com>
>>>> >
>>>> >> Saludos, comunidad,
>>>> >>
>>>> >> Traigo este tema bastante interesante y es que quiero chatear con una
>>>> >> maquina,
>>>>
>>>> d hecho , si somos más estrictos en realidad *SIEMPRE* las máquinas
>>>> están chateando entre ellas , lo q de vez en cuando nos dejan ver unos
>>>> byte-citos ... ;)
>>>>
>>>> hay muchos ejemplos de bots implementados sobre XMPP . Está Google
>>>> guru , los ex-bots de Google Wave , ...
>>>>
>>>> [...]
>>>>
>>>> --
>>>> Regards,
>>>>
>>>> Olemis.
>>>>
>>>> Blog ES: http://simelo-es.blogspot.com/
>>>> Blog EN: http://simelo-en.blogspot.com/
>>>>
>>>> Featured article:
>>>> _______________________________________________
>>>> Python-es mailing list
>>>> Python-es@python.org
>>>> http://mail.python.org/mailman/listinfo/python-es
>>>> FAQ: http://python-es-faq.wikidot.com/
>>>>
>>>
>>>
>>>
>>> --
>>>  *Diego Alonso Uribe Gamez*
>>> ------------------------------
>>>
>>> *Desarrollador web*
>>>
>>> Twitter: @DiegoUG <http://www.twitter.com/DiegoUG>
>>>
>>> Google+: http://gplus.to/diegoug
>>> ------------------------------
>>>
>>>
>>>
>>> _______________________________________________
>>> Python-es mailing list
>>> Python-es@python.org
>>> http://mail.python.org/mailman/listinfo/python-es
>>> FAQ: http://python-es-faq.wikidot.com/
>>>
>>>
>> _______________________________________________
>> Python-es mailing list
>> Python-es@python.org
>> http://mail.python.org/mailman/listinfo/python-es
>> FAQ: http://python-es-faq.wikidot.com/
>>
>>
>
>
> --
>  *Diego Alonso Uribe Gamez*
> ------------------------------
>
> *Desarrollador web*
>
> Twitter: @DiegoUG <http://www.twitter.com/DiegoUG>
>
> Google+: http://gplus.to/diegoug
> ------------------------------
>
>
>
> _______________________________________________
> Python-es mailing list
> Python-es@python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>
_______________________________________________
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a