Android SignalR java客户端:未在连接上接收所有SignalR消息
在尝试了几个选项后,我无法在我的Android应用程序上接收所有信号器消息。在我看来,这似乎与长途运输有关,但我找不到解决办法。。。我收到所有longPolling消息,但有时它会进入处理程序,有时它会尝试在不输入处理程序方法的情况下再次连接到服务器 我试着按照上面的例子来做 代码非常简单:Android SignalR java客户端:未在连接上接收所有SignalR消息,java,android,signalr,java-client,Java,Android,Signalr,Java Client,在尝试了几个选项后,我无法在我的Android应用程序上接收所有信号器消息。在我看来,这似乎与长途运输有关,但我找不到解决办法。。。我收到所有longPolling消息,但有时它会进入处理程序,有时它会尝试在不输入处理程序方法的情况下再次连接到服务器 我试着按照上面的例子来做 代码非常简单: public void startNewSignalR(){ Platform.loadPlatformComponent(new AndroidPlatformComponent());
public void startNewSignalR(){
Platform.loadPlatformComponent(new AndroidPlatformComponent());
// Create a new console logger
Logger logger = new Logger() {
@Override
public void log(String message, LogLevel level) {
System.out.println(message);
}
};
Uri signalRSource = Uri.parse(serverUrl);
HubConnection connection = new HubConnection(signalRSource.toString(), "", true, logger);
eventHub = connection.createHubProxy("eventHub");
connection.error(new ErrorCallback() {
@Override
public void onError(Throwable error) {
System.err.println("There was an error communicating with the server.");
System.err.println("Error detail: " + error.toString());
error.printStackTrace(System.err);
}
});
// Subscribe to the connected event
connection.connected(new Runnable() {
@Override
public void run() {
System.out.println("CONNECTED");
}
});
// Subscribe to the closed event
connection.closed(new Runnable() {
@Override
public void run() {
System.out.println("DISCONNECTED");
}
});
eventHub.subscribe(new Object() {
@SuppressWarnings("unused")
public void receivePendingCountUpdate(String A) {
System.out.println("------------------------>>>>> Count: " + A);
}
});
// Start the connection
connection.start(new LongPollingTransport(logger))
.done(new Action<Void>() {
@Override
public void run(Void obj) throws Exception {
System.out.println("Done Connecting!");
eventHub.invoke("JoinGroup", "signalevents-" + userId + "-pendingcount");
}
});
}
我是SignalR android客户端的专家,我将向您展示实现这一点的最佳方法: 步骤1: 像这样配置集线器连接
private HubConnection _connection;
private HubProxy _hub;
String host = "http://www.thisisawebsite.net"; //The url from your web site
_connection = new HubConnection( host );
_hub = _connection.createHubProxy( "NameHub" ); //The name from your hub class in your server
步骤2:
使用专用方法或类似方法进行连接:
private SignalRFuture<Void> _awaitConnection;
private void startConnection(){
_awaitConnection = _connection.start(new LongPollingTransport(_connection.getLogger()));
//you can do here a while loop for reintents or something ( this is a good practices, at least 3 tries.
try {
_awaitConnection.get(2000,TimeUnit.MILLISECONDS);
escucharGrupos();
isConnected = true;
break;
} catch (InterruptedException e) {
System.out.println("Disconnect . . .");
} catch (ExecutionException e) {
System.out.println("Error . . .");
}catch(Exception e){}
}
专用信号未来连接;
私有void startConnection(){
_awaitConnection=\u connection.start(新的LongPollingTransport(\u connection.getLogger());
//你可以在这里做一个while循环来增强或者其他什么(这是一个很好的实践,至少尝试了3次)。
试试{
_获取(2000,时间单位为毫秒);
蜗牛;
断开连接=正确;
打破
}捕捉(中断异常e){
System.out.println(“断开…”);
}捕获(执行例外){
System.out.println(“错误…”);
}捕获(例外e){}
}
如果这里的所有内容都是正确的,您可以打印类似System.out.println(“连接完成”)的内容,这意味着您的客户机和服务器之间的持久性连接已经完成并且很好
步骤3:配置处理程序:
我通常通过一种方法来实现这一点:
private SubscriptionHandler1 handlerCon;
private void starHandlersConnection(){
handlerCon = new SubscriptionHandler1<String>() {
@Override
public void run(String p1) {
//Here is where we get back the response from the server. Do stuffs
}
};
_hub.on("NameOfFunctionOfYourHub",handlerCon,String.class);
}
私有订阅handler1 handlerCon;
私有void starHandlersConnection(){
handlerCon=新订阅Handler1(){
@凌驾
公共无效运行(字符串p1){
//这里是我们从服务器返回响应的地方
}
};
_on(“hub的函数名”,handlerCon,String.class);
}
遵循所有这些步骤,这应该可以很好地工作
作为提示,在服务类中建立连接中心。您可以通过这种方式进行whatsapp或电报之类的聊天。我是SignalR android客户端的专家,我将向您展示最好的方法: 步骤1: 像这样配置集线器连接
private HubConnection _connection;
private HubProxy _hub;
String host = "http://www.thisisawebsite.net"; //The url from your web site
_connection = new HubConnection( host );
_hub = _connection.createHubProxy( "NameHub" ); //The name from your hub class in your server
步骤2:
使用专用方法或类似方法进行连接:
private SignalRFuture<Void> _awaitConnection;
private void startConnection(){
_awaitConnection = _connection.start(new LongPollingTransport(_connection.getLogger()));
//you can do here a while loop for reintents or something ( this is a good practices, at least 3 tries.
try {
_awaitConnection.get(2000,TimeUnit.MILLISECONDS);
escucharGrupos();
isConnected = true;
break;
} catch (InterruptedException e) {
System.out.println("Disconnect . . .");
} catch (ExecutionException e) {
System.out.println("Error . . .");
}catch(Exception e){}
}
专用信号未来连接;
私有void startConnection(){
_awaitConnection=\u connection.start(新的LongPollingTransport(\u connection.getLogger());
//你可以在这里做一个while循环来增强或者其他什么(这是一个很好的实践,至少尝试了3次)。
试试{
_获取(2000,时间单位为毫秒);
蜗牛;
断开连接=正确;
打破
}捕捉(中断异常e){
System.out.println(“断开…”);
}捕获(执行例外){
System.out.println(“错误…”);
}捕获(例外e){}
}
如果这里的所有内容都是正确的,您可以打印类似System.out.println(“连接完成”)的内容,这意味着您的客户机和服务器之间的持久性连接已经完成并且很好
步骤3:配置处理程序:
我通常通过一种方法来实现这一点:
private SubscriptionHandler1 handlerCon;
private void starHandlersConnection(){
handlerCon = new SubscriptionHandler1<String>() {
@Override
public void run(String p1) {
//Here is where we get back the response from the server. Do stuffs
}
};
_hub.on("NameOfFunctionOfYourHub",handlerCon,String.class);
}
私有订阅handler1 handlerCon;
私有void starHandlersConnection(){
handlerCon=新订阅Handler1(){
@凌驾
公共无效运行(字符串p1){
//这里是我们从服务器返回响应的地方
}
};
_on(“hub的函数名”,handlerCon,String.class);
}
遵循所有这些步骤,这应该可以很好地工作
另外,作为一个提示,在服务类中建立连接中心。你可以用这种方式进行whatsapp或telegram之类的聊天。请帮忙:我在应用程序中使用了信号r。但它随机跳过了一些消息。可能有什么问题。@AbelMorgan mHubProxy.on(客户端方法\u最新消息,新订阅句柄3()这工作正常,在服务器响应时调用,但我已在internet丢失时重新连接signlr连接,但mHubProxy.invoke方法是调用并将方法发送到服务器,但响应未出现,且未调用mHubProxy.on方法。请帮助我解决此问题。当您执行重新连接操作时,必须实例化hubConnection和hub代理对象再次出现,因为您的“旧”对象不再有效,基本上您必须重复第一步过程。请记住再次订阅您的listeners@AbelMorgan请看屏幕截图,我已经建立了HUB连接并订阅了监听器。你能帮我一下吗:我在我的应用程序中使用了信号r。但是它随机跳过了一些消息。什么可能是问题所在。@AbelMorgan mHubProxy.on(客户端\方法\最新消息,新订阅句柄3()这工作正常,在服务器响应时调用,但我已在internet丢失时重新连接signlr连接,但mHubProxy.invoke方法是调用并将方法发送到服务器,但响应未出现,且未调用mHubProxy.on方法。请帮助我解决此问题。当您执行重新连接操作时,必须实例化再次使用hubConnection和hub代理对象因为您的“旧”对象不再有效,基本上您必须重复第一步过程。请记住再次订阅您的listeners@AbelMorgan请看屏幕截图,我已经安装了hubConnection,还订阅了Listener查看此查看此