问题描述
我在我的React Native应用中使用signalR来发表评论。当我第一次尝试建立连接并在帖子上发表评论时,出现错误:在连接传输装置之前无法发送。但是第一次之后,它就可以正常工作了。
我尝试过诸如const envData = await preferencesModel.findOne({ userEmail,"environments.envId": envId },{ 'environments.$.envId': envId }).lean();
和@aspnet/signalr
之类的库。两个库都发生了相同的事情。我认为我的连接存在问题。
由于我需要在应用程序的不同区域发出信号,如评论,通知和消息,因此我以这种方式创建连接。
@microsoft/signalr
此函数返回连接实例,我正在做进一步的处理
import {HubConnectionBuilder,LogLevel} from '@aspnet/signalr';
var connection_count = 0;
export const connectionSignalR = async (endPoint,token) => {
return new Promise((resolve,reject) => {
let _hubConnection = new HubConnectionBuilder()
.withUrl(
`http://www.XXXXXXX.com/${endPoint}?access_token=${token}`,)
.configureLogging(LogLevel.Debug)
.build();
const startConnection = async () => {
await _hubConnection.start();
console.log('[SignalR Connection State]:',_hubConnection.state);
if (_hubConnection.state === 1) {
connection_count = 0;
resolve(_hubConnection);
} else {
console.log('[Error with connection signalR]: ');
if (connection_count < 3) {
connection_count = connection_count + 1;
console.log('[Trying to connection again]:');
startConnection();
} else {
connection_count = 0;
reject('Error in connection');
}
}
};
startConnection();
});
};
解决方法
首先,您应该使用@microsoft/signalr
软件包,因为另一个软件包已经过时了,这是可以维护并接收更新的软件包。
关于您的错误:开始连接之前,您应该注册侦听器。因此,在构建集线器时需要注册此行代码。
hubConnection.on('AddComment',res => {
console.log('[Response from add comment]',res);
});
所以应该是这样的:
let _hubConnection = new HubConnectionBuilder()
.withUrl(
`http://www.XXXXXXX.com/${endPoint}?access_token=${token}`,)
.configureLogging(LogLevel.Debug)
.build();
hubConnection.on('AddComment',res);
});