Любой набор переменных также может быть завершен в классе. Переменные «Variable» могут быть добавлены к экземпляру класса во время выполнения, напрямую обращаясь к встроенному словарю через атрибут __dict__.
Следующий код определяет класс Variables, который добавляет переменные (в этом случае атрибуты) к своему экземпляру во время построения. Имена переменных берутся из указанного списка (который, например, мог быть сгенерирован программным кодом):
# some list of variable names
L = ['a', 'b', 'c']
class Variables:
def __init__(self, L):
for item in L:
self.__dict__[item] = 100
v = Variables(L)
print(v.a, v.b, v.c)
#will produce 100 100 100
Вы должны добавить заголовки обновления к своему сокету io path в конфигурации nginx следующим образом:
location ~* \.io {
.. your configuration
proxy_pass http://localhost:3000;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
Поскольку вы попросили расширение ответа, первое, что вы, возможно, уже знаете is socket.io - это протокол, который использует протокол Websockets под капотом (поэтому оба они одинаковы). В качестве стандартов и протоколы Websockets, и протоколы HTTP прослушивают один и тот же порт 80 или 443. Протокол по умолчанию - HTTP, если пользователь хочет использовать протокол websockets, он / она должен отправить запрос на обновление с HTTP на протокол WS, и есть какой-то ключ аутентификация и шаги.
Вот почему вам нужно поместить их в конфигурацию nginx.
Обратитесь к этому , если вам нужна дополнительная информация о механизме обновления протокола.
Хотя, на мой взгляд, это не является точной копией этого вопроса, я чувствую себя обязанным отдать должное @Paulo за предоставление идеального ответа, даже если он не принят .
То, что, вероятно, происходит, это две вещи.
1-й: Socket.io имеет длительный тайм-аут (отсюда несколько секунд) и пытается восстановить соединение, прежде чем объявить, что он был отключен. Проверьте событие reconnect_attempt или reconnecting (обратите внимание, что я некоторое время не использовал socket.io, поэтому я могу ошибиться в выборе времени для этого)
2-й: вы не говорите socket.io, что он отключается после закрытия окна браузера.
Я бы порекомендовал добавить слушатель событий в ваш javascript, который сообщит вашему серверу, что он отключается при закрытии окна.
window.addEventListener('beforeunload', () => {
socket.disconnect();
}