Comments (9)
Явная бага socket.io - он перестал отправлять arguments для multiplexed соединений.
Грубо говоря, для примера выше, происходит следующее:
- socket.io открывает сервер по URL и передает параметры сразу через URL, так что их принимает дефолтный хендлер
- По открытому соединению посылается пакет на соединение к '/chat' без параметров
Должно быть наоборот:
- Без параметров подключение к серверу
- Отправка пакета вида: '1:::/chat?test=chat' для виртуального соединения.
В целом - я открою у них тикет.
from tornadio2.
Спасибо.
from tornadio2.
Как вариант обхода проблемы, на текущий момент, могу посоветовать следующее.
Например есть ситуация, когда необходимо передавать некий token, по которому можно будет определить пользователя:
- Делать авторизацию в роутере
- Из виртуальных соединений делать что-то типа: self.session.conn.current_user_id
- При открытии соединения, в клиенте, убедиться что token передается в первом вызове (socket.io сохраняет параметры на уровне сессии, а не отдельного соединения - кто первый вызвал io.connect, того и тапки).
Тикет открыл: socketio/socket.io-client#331
from tornadio2.
Я проверил старые версии soket.io до 0.7.5 включительно и ни одна из них не имеет отличного поведения. Может быть так и задумано и стоит сохранять параметры у родительского подключения передавая их при создании дочерних?
from tornadio2.
Протокол утверждает иное, https://github.com/LearnBoost/socket.io-spec:
Example, if the client is trying to connect to the endpoint /test, a message like this will be delivered:
'1::' [path] [query]
Example:
1::/test?my=param
Так что это явная бага, как минимум по следующим причинам:
- Имеет значение в каком порядке соединяемся. Т.е. если первый io.connect без query string, а второй будет чего-то передавать, то в результате ничего не передастся даже в родительское соединение.
- Теряем query string для всех последующих соединений
- Абсолютно нелогичное поведение которое не соответствует их же протоколу.
from tornadio2.
Да действительно, пока не починят отфоркаю tornadio2. Мне нужен этот функционал, а soket-io-client отпатчить сложнее :) Надеюсь быстро починят.
from tornadio2.
А зачем форкать? Можно обойти так:
class ChatConnection(SocketConnection):
def on_open(self, info):
self.send('Chat open connection')
self.send(self.session.conn.info.arguments)
class RouterConnection(SocketConnection):
def on_open(self, info):
self.send('Router open connection')
self.info = info
__endpoints__ = {'/chat': ChatConnection,
'/ping': PingConnection}
Сергей.
from tornadio2.
Ух оно режет русский, если ответ письмом.
from tornadio2.
Да логично, не заметил, что создается линк на session. А я уже написал сохранение request.query в session.init и добавление его к url в connect_endpoint.
from tornadio2.
Related Issues (20)
- Python3 HOT 11
- example gen.py not working HOT 5
- TornadIO2 should allow the user to override message type (Message of Json) HOT 1
- Multiple connects to same endpoint result in connection leakage HOT 6
- Authentication
- Room support HOT 1
- PyPi HOT 6
- Safari wss Invalid certificate chain HOT 8
- Tornadio and AppEngine HOT 1
- THANK YOU SO MUCH FOR WORKING WHEN PLAIN WEBSOCKETS TORNADO EXAMPLE DID NOT WORK!! HOT 1
- using tornado.web.RequestHandler along with tornadio2.SocketConnection HOT 2
- Documentation on Session usage HOT 6
- Running TornadIO2 with Tornado using Supervisord and different ports throws "socket.error: [Errno 98] Address already in use" HOT 1
- ERROR - Error in periodic callback HOT 4
- Server logging and slow server work. HOT 1
- Heartbeat and starvation HOT 5
- Doesnt seems to work in firefox -22.0. HOT 3
- Python 3.5.2 Error
- in the circus, tornadio2 occur error
- Proposing a PR to fix a few small typos
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from tornadio2.