Wie kann ich TXJSON-RPC-Anrufe mit einem JavaScript-Client und Python-Server debuggen?
Frage
Ich habe eine WXPython -App implementiert, die auch einen verdrehten TXJSONRPC -Server enthält. Dies ist mein RPC "Server"; Ich kann es mit einem TCP -Socket und Ausgabenbefehlungen anrufen.
Es gibt ein Python -Testskript mit dem Namen client_subhandled.py in TXJSONRPC, das ich früher getestet habe, und es ruft und empfängt eine Antwort vom RPC -Server, sodass die Python -Client/Server -Kommunikation funktioniert.
Ich muss jedoch JSON RPC -Anrufe von JavaScript, nicht von Python, tätigen. Dazu habe ich ein kleines Java -Applet verwendet, mit dem Sie einen TCP -Socket aus JavaScript öffnen und an/von It (java_socket_bridge.js) lesen und schreiben können. Dies funktioniert auch. Ich habe es nicht mit dem JSON -RPC -Protokoll getestet, sondern einfaches Text mit einem einfachen verdrehten Echo -Protokoll gesendet und empfangen.
Das Problem ist, dass ich mit JavaScript als Client keine RPC -JSON -Anrufe zum Laufen bringen kann. Gibt es eine Möglichkeit, eingehende JSON -RPC -Anrufe in TXJSONRPC zu debuggen? Ich würde idealerweise gerne sehen, welche JSON -Objekte auf dem Server eintreten, um zu sehen, ob sie konform sind.
Vielen Dank!
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()
Lösung
Haben Sie versucht zu verwenden Wireshark ?
Seien Sie vorsichtig, es scheint, als ob es einige Probleme gibt, wenn sie auf Localhost erfasst werden;)