Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - zagk

#1
Sé que esta parece una pregunta un poco estúpida pero es algo que no termino de entender. Supongamos que tenemos un sitio web como YouTube donde las personas pueden usar su servicio sin necesidad de estar "logeadas" o registradas en la plataforma.

Cada vez que la persona hace una petición a una página (video) de YouTube, se verifica la existencia de alguna cookie, si no la tiene añade un nuevo registro a las cookie, que llamaré SESS_ID y por ende un nuevo registro a la tabla sesión con ese identificador.

Tengamos en cuenta que en ese punto esa persona tiene una sesión registrada pero no se encuentra registrado en sí en el sistema. Así que YouTube puede ofrecer recomendaciones dependiendo de la interacción de ese usuario (a través del SESS_ID) con el sitio. Pero que sucede cuando el usuario está logeado, obviamente aún existe la cookie en el navegador, pero ¿cómo se reconoce que el está registrado, como se hace la conexión entre SESS_ID y la tabla usuarios? ¿Hay que tener algún campo llamado user_id en la tabla sesión que haga referencia a un usuario en la tabla usuarios o es necesaria otra tabla sesión pero solo para las personas registradas?

Quisiera que me pudieran aclarar esta duda lo más sencillo posible siguiendo, si es posible, un ejemplo de un sitio web como YouTube que acepta usuarios tanto registrados y logeados como no logeados. ¿Cómo debería realizarse un diseño entre esas 2 tablas para un sitio web que funcione así?
#2
Hola, buen día.

He leído que el internet inicialmente fue un proyecto con fines militares y toda esa cuestión, pero cuando sigo leyendo, tengo estas interrogantes.

Una de las primeras es por supuesto, se supone que a nosotros nos  distribuye el internet las ISP, ahora, ¿quién les da el internet a ellos para que ellos nos lo den a nosotros? y luego ¿quién les da el internet a esos que le dan internet a los ISP? Me imagino que tienen que haber unas empresas o una empresa en la punta de todo, que básicamente esa empresa es internet, me imagino que esa empresa no tiene límite de internet pues ella es internet...

Si una nueva empresa quisiera por ejemplo ser de esas que distribuyen el internet a los ISP, ¿qué hay que hacerse? ¿Habría que contactar a esa empresa que está en lo más alto del internet?

Tengo una super duda que la verdad no entiendo y es con respecto al uso de proxy: yo actualmente trabajo en una empresa que tiene sucursales en todo el mundo, se llama PwC (PricewaterhouseCoopers), ellos, aquí en la sede en mi país, tienen bloqueado páginas como Facebook y YouTube (la tienen bloqueada por el router), básicamente lo que he escuchado es que todas las peticiones que salen de todas las sedes en el mundo van a la sede central (en el Reino Unido) y luego devuelven la búsqueda... ¿Esto quiere decir que ellos tienen a todas las empresas unidas con cables de fibra óptica en donde el tráfico llega principalmente a los servidores de la sede central? Apreciaría que me aclararan la duda.

Por ejemplo, yo cuando hago una petición desde mi computadora hacia cierta página web, por ejemplo: Facebook, esta, como he oído, obligatoriamente pasa por el router y si este encuentra que la petición coincide con una de las que tiene bloqueada, devuelve un error a mi petición. Pero la cuestión ocurre cuando se usa algún proxy, ¿acaso la petición no pasa por el mismo router? ¿No debería bloquearla de todas maneras?, cabe acotar que hay algunas páginas, que ya sea con el uso de proxy o lo que sea no te deja entrar por que lo tienen bloqueada desde los servidores en la sede central (ojo, es lo que he oído); pero aquí, internamente, ¿por qué sucede eso al hacer uso de proxy? Igualmente apreciaría que me aclararan, si es posible, lo más explicado posible como funcionan las peticiones con/sin proxy. Por cierto yo entiendo eso de que el proxy es una computadora que hace la petición por ti, pero inicialmente cuando sale la petición de mi computadora hacia esa computadora para que haga la búsqueda, ¿no pasa primero por el router igual?

Muchas gracias, espero tener respuestas de ustedes, buen día.
#3
Hola, qué tal.

Primero que nada debes saber que la informática tiene muchas ramas, depende mucho de lo que tú realmente quieras aprender. La informática tiene diversos campos en los cuales muchas personas se dedican, algunos ejemplos son: seguridad informática, inteligencia artificial, páginas web, programación de aplicaciones de escritorio, programación de sistemas operativos, etc, etc. Hay un sinfín de campos en los que te puedes especializar, la cuestión es escoger el que a ti mas te guste o te interese aprender; otro tema es que hay muchos lenguajes, frameworks (en caso de desarrollo web) y cada uno tiene su complejidad y aplicaciones. También a esto se añade sobre qué plataforma (sistema operativo) trabajarás y te desarrollarás, de los que más se oyen son las familias de Windows, MacOS y muchas distribuciones de Linux...

Lo ideal sería que te fijaras qué es lo que realmente te gusta del mundo de la informática, ya de ahí te pondrías como meta un objetivo y con ello empiezas a investigar todos los recursos que necesitas para aprender, sobre lo que necesitas para progresar en tu objetivo y así poco a poco te vas volviendo experto en lo que te gusta (nada mejor que hacer lo que te gusta, ya que lo haces con pasión y dedicación).

Espero haberte aclarado algo.
#4
Hola a todos, la verdad es que estoy iniciando con MySQL, Python y ,más importante, estoy aún novato con la programación multi-hilos en python, tengo un gran problema que no sé cual es el error, he visto la descripción de los errores que genera python y a veces me suelta un error que me dice que se ha perdido la conexión, supongo que será porque hago muchas peticiones; y a veces me salta otro error que dice algo como que no pudo analizar la información de la tabla.

Aquí les dejo una foto de los 2 errores que me da el script:
http://imgur.com/a/OPhpF

Intenté solucionar lo anterior buscando a ver como se podía hacer que MySQL trabajara con distintos puertos, para asignarle a cada hilo un puerto pero no he conseguido nada.

De todas formas aquí les dejo el código, solo vean el contexto de como aplico el procesamiento multi-hilo, si pueden entenderlo, mejor, así me dicen en qué me equivoco. Por cierto, he verificado que todo está bien: los nombres de los campos y tablas coinciden correctamente, así que por ese lado no ocurre algún error.

Antiguamente cuando no utilizaba el multi-hilos (que tenía el código con menos funciones) todo iba a la perfección, los problemas llegaron con eso y supongo que estoy haciendo varias cosas mal de las que no me doy cuenta. Aquí se los dejo:

Código (python) [Seleccionar]
# -*- coding: utf-8 -*-

import threading
import mysql.connector
import win32con
import sys, os
import struct
import time
from win32api import *
from win32gui import *
from mysql.connector import Error
from threading import Thread

cnx = mysql.connector.connect(host="localhost",
                              user="root",
                              password="1234",
                              database="gammu")
cnx2 = mysql.connector.connect(host="localhost",
                              user="root",
                              password="1234",
                              database="gammu")
cnx3 = mysql.connector.connect(host="localhost",
                              user="root",
                              password="1234",
                              database="gammu")

cursor = cnx.cursor()
cursor2 = cnx.cursor()
cursor3 = cnx.cursor()

global errKey
global errHash

class WindowsBalloonTip:
    def __init__(self, title, msg):
        message_map= {
            win32con.WM_DESTROY: self.OnDestroy,
        }

        wc = WNDCLASS()
        hinst = wc.hInstance = GetModuleHandle(None)
        wc.lpszClassName = "NotificationTaskR"
        wc.lpfnWndProc = message_map
        classAtom = RegisterClass(wc)

        style = win32con.WS_OVERLAPPED | win32con.WS_SYSMENU
        self.hwnd = CreateWindow(classAtom, "Taskbar", style, 0, 0, \
                                 wind32con.CW_USEDEFAULT, win32con.CW_USEDEFAULT, \
                                 0, 0, hinst, None)
        UpdateWindw(self.hwnd)
        iconPathName = os.path.abspath(os.path.join(sys.path[0], 'balloontip.ico'))
        icon_flags = win32con.LR_LOADFROMFILE | win32con.LR_DEFAULTSIZE
        try:
            hicon = LoadImage(hinst, iconPathName, win32con.IMAGE_ICON, 0,0, icon_flags)
        except:
            hicon = LoadIcon(0, win32con.IDI_APPLICATION)
        flags = NIF_ICON | NIF_MESSAGE | NIF_TIP
        nid = (self.hwnd, 0, flags, win32con.WM_USER+20, hicon, "New message received")
        Shell_NotifyIcon(NIM_ADD, nid)
        Shell_NotifyIcon(NIM_MODIFY, (self.hwnd, 0, NIF_INFO, win32con.WIM_USER+20, \
                                      hicon, "Balloon tooltip", msg, 200, title))

        time.sleep(3)
        DestroyWindow(self.hwnd)
        classAtom = UnregisterClass(classAtom, hinst)
    def OnDestroy(self, hwnd, msg, wparam, lparam):
        nid = (self.hwnd, 0)
        Shell_NotifyIcon(NIM_DELETE, nid)
        PostQuitMessage(0)

def balloon_tip(title, msg):
    w = WindowsBalloonTip(title, msg)

def newWh():
    while True:
        cnx.connect()
        lastRquery = ("select UpdatedInDB, AES_DECRYPT(TextDecoded, (select AES_DECRYPT(cryptkey, '373630303a3a3') from decryptkey)), "
                      "AES_DECRYPT(SenderNumber, (select AES_DECRYPT(cryptkey, '373630303a3a3') from decryptkey)), ID from inboxencrypt where "
                      "chck=0 order by UpdatedInDB asc limit 1")
        cursor.execute(lastRquery)
        regL = cursor.fetchall()
        if not regL:
            cnx.close()
            import time
            time.sleep(3)
            continue
        else:
            for row in regL:
                time = row[0]
                timeC = str(time)
                timeO = timeC[10:]
                message = row[1]
                telephone = row[2]
                toUR = row[3]
                lengM = len(message)
            smsDetect = message[27:]
            procMR = message.split()
            if procMR[0] == "\send":
                #Detect first command
                cnx.close()
                cnx.connect()
                queryAuth = ("SELECT privkey FROM transferauth WHERE "
                             "privkey=sha(%s)", procMR[1])
                cursor.execute(queryAuth)
                authStorage = cursor.fetchall()
                for row in authStorage:
                    key = authStorage[0]
                if procMR[1] == key:
                    #Detect authentication key
                    if procMR[2] == "\a":
                        #Detect command to send multiple messages to all contact list
                        print("Ok")
                    elif len(procMR[2]) == 13:
                        #Send message to specific contact
                        if telpComm[0] == "+" and telpComm [1:3] == "58":
                            #Verifying international code
                            telpComm == procMR[2]
                            if len(smsDetect) > 3:
                                #Verifying minimum message length
                                if smsDetect[-1] == '"' and smsDetect[0] == '"':
                                    #Verifying message format and sending message
                                    msgToSend = smsDetetct[1:-1]
                                    cnx.close()
                                    cnx.connect()
                                    sendQuerExt = ("insert into outbox(DestinationNumber, "
                                                   "TextDecoded, CreatorID) values "
                                                   "('%s','%s','PwC')" % (telpComm, msgToSend))
                                    cursor.execute(sendQuerExt)
                                    cnx.commit()
                                    cnx.close()
                                    #Reconnecting to database and ipdating message status
                                    cnx.connect()
                                    updateRquery = ("update inbox set chck=1 where "
                                                    "ID=%s" % toUR)
                                    cursor.execute(updateRquery)
                                    cnx.commit()
                                    cnx.close()
                                    #Wait for re-establish loop
                                    import time
                                    time.sleep(3)
                                    print("~~~Send message is required for: "+telephone)
                                    print("~~~Send message in required for: "+telpComm+"\n\n")
                                    continue
                                else:
                                    #Invalid message format => ERR_FORMATSMS_INVALID
                                    cnx.connect()
                                    srcErrorSource = ("select errordesc, hexcode from transfererrors "
                                                      "where cause='ERR_FORMATSMS_INVALID'")
                                    cursor.execute(srcErrorSource)
                                    errStorageA = cursor.fetchall()
                                    for row in errStorageA:
                                        errKey = row[0]
                                        errHash = row[1]
                                        cnx.close()
                                    cnx.connect()
                                    recQueryErrorNumb = ("insert into outbox(Text, DestinationNumber, "
                                                         "TextDecoded, CreatorID) values "
                                                         "('%s','%s','%s','PwC')" % (errHash, telephone, errKey))
                                    cursor.execute(recQueryErrorNumb)
                                    cnx.commit()
                                    cnx.close()
                                    #Reconnecting to database and updating message status
                                    cnx.connect()
                                    updateRquery = ("update inbox set chck=1 where "
                                                    "ID=%s" % toUR)
                                    cursor.execute(updateRquery)
                                    cnx.commit()
                                    cnx.close()
                                    #Wait for re-establish loop
                                    import time
                                    time.sleep(3)
                                    continue
                            else:
                                #Minimum message length required => ERR_LENGTHSMS_INVALID
                                srcErrorSource = ("select errordesc, hexcode from transferrors "
                                                      "where cause='ERR_LENGTH_INVALID'")
                                cursor.execute(srcErrorSource)
                                errStorageA = cursor.fetchall()
                                for row in errStorageA:
                                    errKey = row[0]
                                    errHash = row[1]
                                    cnx.close()
                                cnx.connect()
                                recQueryErrorNumb = ("insert into outbox(Text, DestinationNumber, "
                                                         "TextDecoded, CreatorID) values "
                                                         "('%s','%s','%s','PwC')" % (errHash, telephone, errKey))
                                cursor.execute(recQueryErrorNumb)
                                cnx.commit()
                                cnx.close()
                                #Reconnecting to database and updating message status
                                cnx.connect()
                                updateRquery = ("update inbox set chck=1 where "
                                                    "ID=%s" % toUR)
                                cursor.execute(updateRquery)
                                cnx.commit()
                                cnx.close()
                                #Wait for re-establish loop
                                import time
                                time.sleep(3)
                                continue
                        else:
                            #Wrong international telephone format => ERR_FORMATNUMBER_INVALID
                            srcErrorSource = ("select errordesc, hexcode from transfererrors "
                                              "where cause='ERR_FORMATNUMBER_INVALID'")
                            cursor.execute(srcErrorSource)
                            errStorageA = cursor.fetchall()
                            for row in errStorageA:
                                errKey = row[0]
                                errHash = row[1]
                            cnx.connect()
                            recQueryErrorNumb = ("insert into outbox(Text, DestinationNumber, "
                                                 "TextDecoded, CreatorID) values "
                                                 "('%s','%s','%s','PwC')" % (errHash, telephone, errKey))
                            cursor.execute(recQueryErrorNumb)
                            cnx.commit()
                            cnx.close()
                            #Reconnecting to database and updating message status
                            cnx.connect()
                            updateRquery = ("update inbox set chck=1 where "
                                            "ID=%s" % toUR)
                            cursor.execute(updateRquery)
                            cnx.commit()
                            cnx.close()
                            #Wait for re-establish loop
                            import time
                            time.sleep(3)
                            continue
                    else:
                        #Unknown message or command => ERR_TLPNUMBER_INVALID
                        srcErrorSource = ("select errordesc, hexcode from transfererrors "
                                                      "where cause='ERR_TLPNUMBER_INVALID'")
                        cursor.execute(srcErrorSource)
                        errStorageA = cursor.fetchall()
                        for row in errStorageA:
                            errKey = row[0]
                            errHash = row[1]
                            cnx.close()
                        cnx.connect()
                        recQueryErrorNumb = ("insert into outbox(Text, DestinationNumber, "
                                                         "TextDecoded, CreatorID) values "
                                                         "('%s','%s','%s','PwC')" % (errHash, telephone, errKey))
                        cursor.execute(recQueryErrorNumb)
                        cnx.commit()
                        cnx.close()
                        #Reconnecting to database and updating message status
                        cnx.connect()
                        updateRquery = ("update inbox set chck=1 where "
                                                    "ID=%s" % toUR)
                        cursor.execute(updateRquery)
                        cnx.commit()
                        cnx.close()
                        #Wait for re-establish loop
                        import time
                        time.sleep()
                        continue
                else:
                    #Authetication error, wron key => ERR_AUTHKEY_INVALID
                    srcErrorSource = ("select errordesc, hexcode from transfererrors "
                                                      "where cause='ERR_AUTHKEY_INVALID'")
                    cursor.execute(srcErrorSource)
                    errStorageA = cursor.fetchall()
                    for row in errStorageA:
                        errKey = row[0]
                        errHash = row[1]
                        cnx.close()
                    cnx.connect()
                    recQueryErrorNumb = ("insert into outbox(Text, DestinationNumber, "
                                                         "TextDecoded, CreatorID) values "
                                                         "('%s','%s','%s','PwC')" % (errHash, telephone, errKey))
                    cursor.execute(recQueryErrorNumb)
                    cnx.commit()
                    cnx.close()
                    #Reconnecting to database and updating message status
                    cnx.connect()
                    recQueryErrorNumb = ("update inbox set chck=1 where "
                                                         "ID=%s" % toUR)
                    cursor.execute(updateRquery)
                    cnx.commit()
                    cnx.close()
                    #Wait for re-establish loop
                    import time
                    time.sleep()
                    continue
            else:
                print("|| "+telephone+"\t\t"+timeO)
                print("|| "+message+"\n\n")
                balloon_tip("Mensaje recibido",message+"\nDe: "+telephone+"\t"+timeO)
                file = open("smscenter.log","a")
                file.write("Message was received at: "+timeO+"\n")
                file.write("----------------------------------------\n")
                file.write("|| "+telephone+"\n")
                file.write("|| "+message.encode("utf8")+"\n")
                file.write("-----Length of sms: "+str(lengM)+"\n")
                file.write("-----Recognize: \n\n\n")
                file.close()
                cnx.close()
                cnx.connect()
                updateRquery = ("update inbox set chck=1 where ID=%s" % toUR)
                cursor.execute(updateRquery)
                cnx.commit()
                cnx.close()
                import time
                time.sleep(3)
                continue           

def readWh():
    while True:
        cnx2.connect()
        lastRquery2 = ("select UpdatedInDB, TextDecoded, SenderNumber, ID from inbox where "
                       "chck=0 order by UpdatedInDB asc limit 1")
        cursor2.execute(lastRquery2)
        regL2 = cursor2.fetchall()
        if not regL2:
            cnx2.close()
            cnx2.connect()
            queryTrunc = ("delete from inbox where chck=1")
            cursor2.execute(queryTrunc)
            cnx2.commit()
            cnx2.close()
            import time
            time.sleep(3)
            continue
        else:
            for row in regL2:
                timeReceived = row[0]
                timeReceivedC = str(timeReceived)
                timeReceivedO = timeReceivedC[10:]
                messageRec = row[1]
                telephoneRec = row[2]
                idRec = row[3]
                cnx2.close()
            print("Hola menor")
            cnx2.connect()
            queryA = ("insert into inboxencrypt(id, UpdatedInDB, TextDecoded, SenderNumber) "
                      "values (%s, %s, AES_ENCRYPT('%s', (select AES_DECRYPT(cryptkey, '373630303a3a3') from decrypkey)), "
                      "AES_ENCRYPT('%s', (select AES_DECRYPT(cryptkey, '373630303a3a3') from decrypkey)))")
            cursor2.execute(queryA)
            cnx2.commit()
            cnx2.close()
            #Drop message
            cnx2.connect()
            queryB = ("update inbox set chck=1 where "
                      "ID=%s" % idRec)
            cursor2.execute(queryB)
            cnx2.commit()
            cnx2.close()
            cnx2.connect()
            queryC = ("delete from inbox where chck=1")
            cursor2.execute(queryC)
            cnx2.commit()
            cnx2.close()
            continue

def sentWh():
    while True:
        cnx3.connect()
        lastRquery3 = ("select UpdatedInDB, InsertIntoDB, SendingDateTime, DestinationNumber, "
                       "TextDecoded, ID, Status, CreatorID from sentitems where chck=0 order by UpdatedInDB asc limit 1")
        cursor3.execute(lastRquery3)
        regL3= cursor3.fetchall()
        if not regLr:
            cnx3.close()
            cnx3.connect()
            queryTrunc1 = ("delete from sentitems where chck=1")
            cursor3.execute(queryTrunc1)
            cnx3.commit()
            cnx3.close()
            import time
            time.sleep(3)
            print("Hola menor")
            continue
        else:
            for row in regL3:
                timeUpdated = row[0]
                timeInsert = row[1]
                timeSent = row[2]
                telephoneSent = row[3]
                messageSent = row[4]
                idSent = row[5]
                status = row[6]
                creator = row[7]
                cnx3.close()
            cnx3.connect()
            print("Hola menor")
            queryD = ("insert into sentencrypt(id, UpdatedInDB, InsertIntoDB, SendingDateTime, "
                      "DestinationNumber, TextDecoded, Status, CreatorID) values "
                      "(%s, '%s', '%s', '%s', "
                      "AES_ENCRYPT('%s', (select AES_DECRYPT(cryptkey, '373630303a3a3') from decrypkey)), "
                      "AES_ENCRYPT('%s', (select AES_DECRYPT(cryptkey, '373630303a3a3') from decrypkey)), "
                      "'%s', AES_ENCRYPT('%s', (select AES_DECRYPT(cryptkey, '373630303a3a3') from decrypkey)))"
                      % (idSent, timeUpdated, timeInsert, timeSent, telephoneSent, messageSent, status, creator))
            cursor3.execute(queryD)
            cnx3.commit()
            cnx3.close()
            #Drop message
            cnx3.connect()
            queryZ = ("update sentitems set chck=1 where "
                      "ID=%s" % idSent)
            cursor3.execute(queryZ)
            cnx3.commit()
            cnx3.close()
            cnx3.connect()
            queryE = ("delete from sentitems where chck=1")
            cursor.execute(queryE)
            cnx3.commit()
            cnx3.close()
            import time
            time.sleep(3)
            continue
   

if __name__ == '__main__':
    print("Be sure you have Windows pop-ups notifications enabled.\n\n")
    print("SMS Center will show pop-ups notifications when message is being received."
          "\nThis window need to be open at anytime.")
    Thread(target = newWh).start()
    Thread(target = readWh).start()
    Thread(target = sentWh).start()
#5
Hola, buen día. Tengo una pregunta que creo no sea posible pero aquí va de todas formas:

Yo tengo una página alojada en Heroku en donde tengo una especie de bot que interactúa con PostgreSQL y corro una base de datos local MySQL (luego hago la migración), la cuestión es que yo quisiera poder visualizar como un log de todas las conversaciones que le llegan al bot desde la página web pero en mi computadora sin necesidad de entrar a un panel de administrador en la misma página, ¿es posible transferir información de la página web y almacenarla, por ejemplo, en una base de datos a nivel local? Por cierto, estoy trabajando con NodeJS.

Gracias y buen día.
#6
Vale amigo, muchas gracias, haré eso que me has recomendado.

El Centro de Mensajería es controlado solo por una máquina, es decir, las notificaciones solo se ven allí, las notificaciones de los mensajes recibidos los recibe ella misma.

Gracias de nuevo, me has aclarado la duda.
#7
Hola MinusFour, la problemática que se presenta es la siguiente:

Los que quieren el Centro de Mensajería lo van a utilizar para un evento, en donde envían mensajes masivos a las personas sobre encuestas, etc. Un gran número de personas responderán al instante. El Centro de Mensajería utiliza un software de terceros para procesar todos los datos del módem y usa una base de datos propia para almacenar los mensajes enviados y recibidos, cada vez que el módem recibe un mensaje el software lo procesa y lo almacena en la tabla inbox de la base de datos: el script que hice lo que hace es verificar mediante un bucle cada vez que la tabla se actualiza (cada vez que la tabla inbox se actualiza quiere decir que hay un mensaje nuevo, con actualiza quiero decir que se añadió un nuevo registro) muestra el último registro que llegó y lo muestra en forma de notificación en Windows.

Con esto, por eso digo, si dejo que el bucle haga un sleep durante al menos 10 segundos y en ese período llega uno o varios mensajes, cuando vuelva a iniciar el bucle, luego del sleep, no los mostrará porque detectará que la tabla no se ha actualizado.

¿Crees que con eso de los triggers pueda hacer, por ejemplo, pasar todos los mensajes que se reciban (de la tabla inbox original) a otra tabla y crear un campo de comprobación que, por ejemplo, si un registro tiene ese campo en no visto el script lo tome y lo muestre en notificacion y ahora le cambie el estatus a visto, de allí cuando el script vuelva a recorrer la tabla detectará que ese mensaje ya ha sido notificado?
#8
Gracias por la respuesta. La cuestión es que, por ejemplo, ¿cómo hago en el caso de que me lleguen 20 mensajes seguidos en 20 o 30 segundos? Tengo que mostrarlos todos en las notificaciones, no puedo esperar una lectura de cada cierto tiempo, además, la notificación se lanza cada vez que se actualiza la tabla por lo que si el bucle entra en reposo durante 20 o 30 segundos y en ese período llega un mensaje, cuando se reinicie de nuevo pues no lo mostrará.

Lo que me pidieron fue que mostrara una notificación en Windows enseguida que llegara un mensaje a la base de datos.

Veo interesanto eso de los triggers que hablas, perdón por mi ignorancia pero apenas estoy empezando con MySQL. ¿Es posible de que cada vez que se actualice una tabla con un nuevo registro este se pase a otra tabla? Y así podría hacer el ciclo que te digo en esa tabla y el servicio de mensajería se ejecutaría sobre la otra tabla, que es la original.

¿Es posible? ¿Me sugerirías una mejor manera para realizar todo este proceso? Gracias por la respuesta, amigo.
#9
Hola, buen día. Tengo una interrogante con respecto a MySQL:

Actualmente estoy programando un Centro de Mensajería usando una librería externa y python. El problema radica en lo siguiente: la librería externa hace uso del módem y la base de datos, cada mensaje que recibe el módem, la librería lo procesa y lo envía a la base de datos automáticamente (la tabla llamado inbox, específicamente), ese es un servicio que se está ejecutando constantemente para detectar alguna recepción y guardarla automáticamente; ahora en python (al mismo tiempo que se ejecuta el servicio que os he dicho) se ejecuta un script que es un bucle que está leyendo la tabla inbox constantemente en busca de alguna actualización de la tabla (es decir, cuando llegue un mensaje nuevo) y cuando la tabla se actualiza (o debería), que llega un mensaje nuevo, lanza una notificación que se muestra en Windows, el ciclo en python es infinito (while True) por lo que nunca se detiene de leer la tabla inbox.

Cuando inicio ambos, funciona la recepción, almacenamiento y notificación perfectamente, pero una vez que han transcurrido 5 o 10 minutos pareciera que todo deja de funcionar aunque ninguno de los 2 muestra error; el módem no recibe mensajes, tampoco envía (también tengo una monitor que me muestra datos sobre el módem, tales como la señal, etc, este tampoco se actualiza).

Quisiera poder resolver esto, pero no sé lo que está sucediendo, pareciera que no permitiera tantas peticiones a la tabla (quizás por el bucle del script en python) o es que se le cae el servicio al módem.

¿Alguna idea sobre cómo solucionar este problema?
#10
Muchas gracias engel, te agradezco.