Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using SignalR server from Python code

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.

like image 276
Den Avatar asked Jun 17 '13 13:06

Den


2 Answers

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()
like image 156
Malcolm McCaffery Avatar answered Sep 27 '22 18:09

Malcolm McCaffery


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.

like image 42
davidfowl Avatar answered Sep 27 '22 17:09

davidfowl