¿Cómo puedo depurar llamadas TXJSON-RPC usando un cliente JavaScript y un servidor Python?

StackOverflow https://stackoverflow.com/questions/8838334

  •  27-10-2019
  •  | 
  •  

Pregunta

He implementado una aplicación WXPYTHON, que también tiene un servidor TXJSONRPC retorcido. Este es mi "servidor" RPC; Puedo llamarlo usando un socket TCP y emitir comandos.

Hay un script de prueba de Python llamado client_subhandled.py en TXJSONRPC que solía probar, y llama y recibe una respuesta del servidor RPC, por lo que funciona la comunicación del cliente/servidor de Python.

Sin embargo, necesito hacer llamadas JSON RPC desde JavaScript, no desde Python. Para hacerlo, he usado un pequeño applet Java que le permite abrir un socket TCP de JavaScript y leer y escribir hacia/desde él (Java_socket_Bridge.js). Esto también funciona, lo he probado no utilizando el protocolo JSON RPC, pero enviando y recibiendo texto sin formato usando un protocolo de eco retorcido simple.

El problema es que al usar JavaScript como cliente, parece que no puedo hacer que funcionen las llamadas RPC JSON. ¿Hay alguna manera de depurar las llamadas entrantes de JSON RPC en TXJSONRPC? Idealmente, me gustaría ver en qué entran los objetos JSON en el servidor para ver si cumplen.

¡Gracias!

from twisted.internet import wxreactor  # socket library
wxreactor.install()                     # for using twisted along with wxPython

# using netstring TCP protocol
from txjsonrpc.netstring import jsonrpc
from twisted.web import server

# import twisted reactor *only after* installing wxreactor
from twisted.internet import reactor

myreactor = reactor

def register(application):
    # initialise and run the TWISTED reactor
    reactor.registerWxApp(application)
    #rpcCom.myreactor.listenTCP(9000, rpcCom.EchoServerFactory())
    reactor.listenTCP(9000, factory)
    reactor.run()

class Example(jsonrpc.JSONRPC):
    """An example object to be published."""

    def jsonrpc_echo(self, x):
        """Return all passed args."""
        print "echo called"
        return x

class Testing(jsonrpc.JSONRPC):

    def jsonrpc_getList(self):
        """Return a list."""
        return [1,2,3,4,'a','b','c','d']

class Math(jsonrpc.JSONRPC):
    """
    An example object to be published.
    """
    def jsonrpc_add(self, a, b):
        """
        Return sum of arguments.
        """
        return a + b

factory = jsonrpc.RPCFactory(Example)
factory.putSubHandler('math', Math)
factory.putSubHandler('testing', Testing)

factory.addIntrospection()
¿Fue útil?

Solución

¿Has intentado usar Wireshark ?

Tenga cuidado, parece que hay algunos problemas al capturar en localhost;)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top