我正在尝试跟踪连接的用户到我的中心。 我尝试这样做的方法是为我的集线器创建自定义Authorize属性,并检查尝试连接的用户。如果用户已连接,则集线器不会授权连接
char *line;
int eofreached; // pay attention
eofreached = 0;// pay attention
while(eofreached == 0)// pay attention
{
line = readline(fd, MAX_INPUT_LENGTH, &eofreached);// pay attention
/*IF all lines have been read then break off the loop, basically determine EOF ?*
//text processing on the line
}
/* Utility function to read lines of unknown lengths */
char *readline(FILE* fp, int max_length, int* eof_found)// pay attention
{
//The size is extended by the input with the value of the provisional
char *str;
int ch;
int len = 0;
int current_max = max_length;
str = (char*)malloc(sizeof(char)*current_max);
if(!str)
return str;
while((char)(ch = fgetc(fp))!='\n' && ch != EOF)
{
str[len++] = ch;
if(len == current_max)
{
current_max = current_max + max_length;
str = realloc(str, sizeof(char)*current_max);
if(!str)
return str;
}
}
if ( ch == EOF ) // pay attention // this line and next line
*eof_found = 1; // pay attention // can be improved: *eof_found = ch == EOF
str[len] = '\0';
return str;
}
如果每个连接只调用一次AuthorizeHubConnection方法,那么这将正常工作,但这不是正在发生的事情。
当我加载试图与集线器连接的页面时,AuthorizeHubConnection奇怪地运行多次,它运行的次数并不总是相同的,有时它是5,有些是3,我真的不知道是什么可能会导致它。
你知道什么可能导致AuthorizeHubConnection被多次调用吗?
答案 0 :(得分:3)
每次SignalR服务器收到HTTP请求之前都会调用授权(参见:https://github.com/SignalR/SignalR/blob/dev/src/Microsoft.AspNet.SignalR.Core/PersistentConnection.cs#L161)。当SignalR维持逻辑上持久的连接时,它在后台发出多个HTTP请求。使用Websockets传输时,通常在启动连接(对于协商,连接和启动请求)和每次重新连接时只能看到其中的3个。 longPolling和serverSentEvents传输每次发送数据(发送)时都会创建一个HTTP请求。此外,longPolling创建一个轮询HTTP请求来接收数据(轮询)。必须授权这些请求中的每一个,因此这就是您看到对AuthorizeHubConnection方法的多次调用的原因。