Использование сервера 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()