Pregunta

What are my options for integrating Python with SignalR?

The Python code is a part of large 3rd party product, not a matter of language preference. SignalR server provides subscriptions to existing .NET products.

We would like to reuse .NET SignalR server with Python.

¿Fue útil?

Solución 2

I can think of a few ways and they are all theoretical (and probably bad ideas to begin with):

  • IPC - host the python app and the signalr app as different processes and somehow pipe information back and forth using some kind of ipc mechanism (named pipes, tcp, something else).
  • Use IronPython (which probably isn't really an option).
  • Port a lightweight verison of SignalR to python (https://github.com/davidfowl/SignalR.Lite). Probably won't work the same way but maybe you don't need all the features.

Or you can hope to find a library in python that does something similar.

Otros consejos

There is a SignalR client available on the python package index named "signalr-client" which supports some basic SignalR functionality Source

It is compatible with Python v2 and v3.

Functionality supported includes:

  • Connecting to SignalR Hub
  • Invoking SignalR Method
  • Event handler to process SignalR Notifications

It requires the following modules installed via pip:

  • gevent
  • sseclient
  • websocket-client

Sample usage as per link:

#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()
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top