0
在JavaScript中注册的调用过程刚开始使用高速公路。我已经做了一些例子,现在我试图根据教程制作自己的服务器和客户端。从python服务器Autobahn,Wamp
我将在服务器和客户端的JavaScript库中使用python的autobahn。目前,我正在努力解决只能从客户端调用服务器到服务器的过程的问题,但反之亦然,我只能从客户端发布事件。
如果我尝试调用过程我得到以下错误
Failure: autobahn.wamp.exception.ApplicationError:
ApplicationError('wamp.error.no_such_procedure', args = ("no procedure
'com.myapp.add2client' registered",), kwargs = {})
如此看来应用程序未注册,但在客户端上它看起来像它,因为我得到一个precedure ID。
Procedure registered: 4026531820798724
任何人都可以指向正确的方向吗?
客户端
<script>
var connection = new autobahn.Connection({
url: 'ws://raspberrypi.local:8080',
realm: 'realm1'
});
connection.onopen = function (session) {
// 1) subscribe to a topic
function onevent(args) {
console.log("Event:", args[0]);
}
session.subscribe('com.myapp.hellofromserver', onevent);
// 2) publish an event
session.publish('com.myapp.hellofromclient', ['Hello, world!']);
// 3) register a procedure for remoting
function add2(args) {
console.log("procedure called, result:", res);
return args[0] + args[1];
}
session.register('com.myapp.add2client', add2).then(
function (registration) {
console.log("Procedure registered:", registration.id);
},
function (error) {
console.log("Registration failed:", error);
}
);
// 4) call a remote procedure
session.call('com.myapp.add2server', [10, 10]).then(
function (res) {
console.log("Result:", res);
}
);
};
connection.open();
</script>
服务器端
# Imports
import sys
from twisted.python import log
from twisted.internet import reactor
from twisted.internet.defer import inlineCallbacks
from twisted.internet.endpoints import serverFromString
from autobahn.wamp import router, types
from autobahn.twisted.util import sleep
from autobahn.twisted import wamp, websocket
class MyBackendComponent(wamp.ApplicationSession):
def onConnect(self):
self.join("realm1")
@inlineCallbacks
def onJoin(self, details):
# 1) subscribe to a topic
def onevent(msg):
print("Got event: {}".format(msg))
yield self.subscribe(onevent, 'com.myapp.hellofromclient')
# 2) publish an event
self.publish('com.myapp.hellofromserver', 'Hello, world!')
# 3) register a procedure for remoting
def add2(x, y):
return x + y
self.register(add2, 'com.myapp.add2server');
# 4) call a remote procedure
res = yield self.call('com.myapp.add2client', 2, 3)
print("Got result: {}".format(res))
if __name__ == '__main__':
## 0) start logging to console
log.startLogging(sys.stdout)
## 1) create a WAMP router factory
router_factory = router.RouterFactory()
## 2) create a WAMP router session factory
session_factory = wamp.RouterSessionFactory(router_factory)
## 3) Optionally, add embedded WAMP application sessions to the router
component_config = types.ComponentConfig(realm = "realm1")
component_session = MyBackendComponent(component_config)
session_factory.add(component_session)
## 4) create a WAMP-over-WebSocket transport server factory
transport_factory = websocket.WampWebSocketServerFactory(session_factory, \
debug = True, \
debug_wamp = False)
## 5) start the server from a Twisted endpoint
server = serverFromString(reactor, "tcp:8080")
server.listen(transport_factory)
## 6) now enter the Twisted reactor loop
reactor.run()
异常
Unhandled error in Deferred:
Unhandled Error
Traceback (most recent call last):
Failure: autobahn.wamp.exception.ApplicationError: ApplicationError('wamp.error.no_such_procedure', args = ("no procedure 'com.myapp.add2client' registered",), kwargs = {})
Got event: Hello, my dear server!
非常感谢!
好吧,我想我明白了。非常感谢! – user1532132