假设您只使用Autobahn连接(不是原始WebSocket).
我们如何测试没有网络,我们的RPC方法和事件?
由于它是Twisted,我认为最合适的工具是Twisted Trial.
但我无法弄清楚如何编写这些测试,而不需要编写大量的样板代码并重新使用Autobahn的内部实现(甚至我不确定我是否能够这样做).
你会怎么做?
我的 android 应用程序启动了一个服务,该服务打开一个 websocket 以与远程服务器进行通信。该服务生成一个线程,其运行方法如下所示。
public void run() {
try {
super.run();
for(int i = 1; i < 1000; i++) {
Log.d(TAG, String.format(" *** Iteration #%d.", i));
Thread.sleep(3000); // Dummy load.
mWebsocket.sendTextMessage("Test");
}
}
catch (Exception exc) {
Log.d(MY_TAG, "MyThread.run - Exception: " + exc.getMessage());
}
}
Run Code Online (Sandbox Code Playgroud)
当我关闭屏幕或将应用程序发送到后台时,logcat 显示循环正在运行,但远程服务器停止接收测试消息。显然,消息在某处汇集,因为一旦应用程序回到前台,服务器将收到一堆测试消息。这是 Android 上的预期行为吗?我尝试了不同的 Websocket 包(Autobahn、okhttp3、...),结果是一样的。
我有一个使用Twisted的Autobahn Python客户端应用程序,它连接到Crossbar.io服务器.使用ReconnectingClientFactory丢失网络连接后,客户端应用程序可以成功重新连接.客户端在连接时注册被叫方名称,以便其他应用程序可以调用它.这始终适用于初始连接.
但是,从丢失的连接恢复时,无法重新注册被叫方名称,因为仍然从先前丢失的连接注册了被叫方名称.这会导致错误'wamp.error.procedure_already_exists'.由于被叫方名称注册仍与先前丢失的连接相关联,因此我将取消注册旧的被叫方名称.
我能看到的唯一解决方案是在每个连接上生成并注册唯一的新被叫方名称,以避免与先前注册的被叫方名称冲突.
有没有更好或更简单的方法来处理这个?似乎WAMP协议允许使用注册ID从另一个连接取消注册被调用者名称,但是高速公路Python客户端库似乎不允许这样做.
我想连接到Poloniex的Push API.在他们的页面上,他们写下以下内容
要使用推送API,请连接到wss://api.poloniex.com并订阅所需的订阅源.
wss = WebSocket安全 - > SSL保护
他们还举例说明了Node.js和Autobahn | JS:
var autobahn = require('autobahn');
var wsuri = "wss://api.poloniex.com";
var connection = new autobahn.Connection({
url: wsuri,
realm: "realm1"
});
connection.onopen = function (session) {
function marketEvent (args,kwargs) {
console.log(args);
}
function tickerEvent (args,kwargs) {
console.log(args);
}
function trollboxEvent (args,kwargs) {
console.log(args);
}
session.subscribe('BTC_XMR', marketEvent);
session.subscribe('ticker', tickerEvent);
session.subscribe('trollbox', trollboxEvent);
}
connection.onclose = function () {
console.log("Websocket connection closed");
}
connection.open();
Run Code Online (Sandbox Code Playgroud)
但是,我不想使用JavaScript,而是使用C++.还有一个用于C++的Autobahn-Library,叫做Autobahn | CPP.我已经安装了它并尝试运行他们的订阅者示例代码 …