Использование сервера SignalR из кода Python
Каковы мои варианты интеграции Python с SignalR?
код Python является частью большого стороннего продукта, а не вопросом языковых предпочтений. Сервер SignalR предоставляет подписки на существующие продукты .NET.
мы хотели бы повторно использовать сервер .NET SignalR с Python.
2 ответов
Я могу придумать несколько способов, и все они теоретические (и, вероятно, плохие идеи, чтобы начать с):
- IPC-хост приложение python и приложение signalr как разные процессы и каким-то образом передавать информацию взад и вперед, используя какой-то механизм ipc (именованные каналы, tcp, что-то еще).
- используйте IronPython (что, вероятно, на самом деле не вариант).
- Port облегченная версия SignalR для python (https://github.com/davidfowl/SignalR.Lite). Вероятно, не будет работать так же, но, возможно, Вам не нужны все функции.
или вы можете надеяться найти библиотеку в python, которая делает что-то подобное.
в индексе пакета python доступен клиент SignalR с именем "signalr-client", который поддерживает некоторые основные функции SignalR источник
Он совместим с Python v2 и v3.
поддерживаемые функции включают в себя:
- подключение к концентратору SignalR
- Вызов Метода SignalR
- обработчик событий для обработки уведомлений SignalR
для этого требуются следующие модули устанавливаются через Пип:
- gevent
- sseclient
- websocket-клиент
использование образца согласно ссылке:
#create a connection
connection = Connection(url, session)
#start a connection
connection.start()
#add a handler to process notifications to the connection
connection.handlers += lambda data: print 'Connection: new notification.', data
#get chat hub
chat_hub = connection.hub('chat')
#create new chat message handler
def message_received(message):
print 'Hub: New message.', message
#receive new chat messages from the hub
chat_hub.client.on('message_received', message_received)
#send a new message to the hub
chat_hub.server.invoke('send_message', 'Hello!')
#do not receive new messages
chat_hub.client.off('message_received', message_received)
#close the connection
connection.close()