¿Cómo puedo depurar llamadas TXJSON-RPC usando un cliente JavaScript y un servidor Python?
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()
Solución
¿Has intentado usar Wireshark ?
Tenga cuidado, parece que hay algunos problemas al capturar en localhost;)