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