stephenmcd / django-socketio Goto Github PK
View Code? Open in Web Editor NEWWebSockets for Django
License: BSD 2-Clause "Simplified" License
WebSockets for Django
License: BSD 2-Clause "Simplified" License
I wanna deploy my app with django_socketio on the nginx. I refer this article http://www.stephendiehl.com/?p=309. It is great.Anything is fine.
I run it on Firefox 11.0 debian squezze.
BUT, the connection will be disconnected automatically by server in 60seconds. whatever, I loop to send a check message to server, and let server return a message in each 5s 10s 15s 30s. Anyway, the server always disconnects in 60 seconds. I saw it connects with xhr-mulitpart in FF. And It's good with xhr-polling in chrome.
What's problem for this? BTW, it runs fine in development env.
Result: nothing happens. No output in either terminal.
When adding a room I see this:
127.0.0.1 - - [2012-02-01 20:22:25] "Socket.IO message: ['subscribe', 'room-11']"
I see an error about a missing file -- a request to /socket.io/lib/vendor/web-socket-js/WebSocketMain.swf. (should that also be fixed?)
I fix (I think?) the swf issue by downloading that WebSocketMain.swf file from https://github.com/LearnBoost/socket.io-client and just hard-coding the path into the socket.io.js file.
After 'fixing' the swf issue, when I type something into the chat box and press enter I see, in the socketio server log:
127.0.0.1 - - [2012-02-01 20:40:39] "Socket.IO message: [{u'action': u'start', u'room': 9, u'name': u'this is a message typed into the chat box'}]"
I might be missing something obvious here. Tested in FF and Chrome latest.
Hello,
First of all, thank you very much for this framework. It's been saving my life over and over again.
I had it installed in my old Mac and I didn't have the chance to update it, but I bought a new computer and when I tried to run my server using the package I just downloaded, I got stuck in the following error:
"ImportError: cannot import name SocketIOServer"
So, I took a look and figured how to fix it. The error is in the command file runserver_socketio.py located in the folder site-packages/django_socketio/management/commands/
In the line 13 it says:
"from socketio import SocketIOServer"
Then I fixed it to:
"from socketio.server import SocketIOServer"
Hope it helps.
"Errors should never pass silently"
https://github.com/stephenmcd/django-socketio/blob/master/django_socketio/urls.py#L11
Plz put after
SocketIOServer running on 0.0.0.0:8080
Events loaded from apps: ,
Because i seen the socket recived but no the response, I pass a day searching why not send the data.
And i seen the reason of the import error was silenced.
I'm pretty new to this, so I may be misunderstanding something here. With that in mind --
Looking at runserver_socketio.py and the example project, there's a fair amount of blocking code in here. For instance:
def message(request, socket, context, message):
"""
Event handler for a room receiving a message. First validates a
joining user's name and sends them the list of users.
"""
message = message[0]
room = get_object_or_404(ChatRoom, id=message["room"])
if message["action"] == "start":
user, created = room.users.get_or_create(name=strip_tags(message["name"]))
if not created:
socket.send({"action": "in-use"})
else:
context["user"] = user
users = [u.name for u in room.users.exclude(id=user.id)]
socket.send({"action": "started", "users": users})
user.session = socket.session.session_id
user.save()
joined = {"action": "join", "name": user.name, "id": user.id}
socket.send_and_broadcast_channel(joined)
else:
try:
user = context["user"]
except KeyError:
return
if message["action"] == "message":
message["message"] = strip_tags(message["message"])
message["name"] = user.name
socket.send_and_broadcast_channel(message)
All of the ORM calls will block the entire gevent server, as far as I know. You could get around this by installing a greenlet-enabled db adapter (such as psycogreen), but this doesn't really feel seamless.
I'm not sure what the right solution is here. I feel like the problem comes from wanting to support bidirectional communication in the django functions.
A possible solution:
Allow event binding based on more criteria, such as message["action"] checking (a'la what's going on with channel checking). Then run each event handler in its own thread -- or, if they had celery enabled, run it as a celery task. The event handlers wouldn't, then, be able to communicate back (or maybe that would work fine?) So we could think of these as autonomous tasks?
I'm not sure how we'd implement the above message function in this scheme -- or if it's really even possible.
I'm trying to broadcast a message to all clients listening on a channel whenever a new db entry is created for a particular model. I've added a post save hook for the db model, but when trying to broadcast I get a NoSocket exception with the message:
There are no clients on the channel: ...
As far as I can tell this seems to be because the code runs on the normal server, not on the socketio server. Is there any way of dealing with this? The same error shows up when trying to use the system_message functionality in the example project.
Hi, i have a next problem:
80 port is listened by nginx. Opera doesn't support CORS. So when i proxy to SocketIOServer Opera doesn't work. First i thought to redirect to 9000 port for chat room, but now i need socketio on entire site. So how to deal nginx with SocketIOServer.
P.S. One more thing. /socket.io/lib/vendor/web-socket-js/WebSocketMain.swf doesn't load - the same problem as in Issue #7. I changed WEB_SOCKET_SWF_LOCATION to http://cdn.socket.io/stable/WebSocketMain.swf, but it didn't resolve the problem with opera. I heard that WebSocketInsecure.swf could solve the problem with CORS but how to configure it?
Thank you.
This behaviour is somewhat unintuitive:
@on_subscribe(channel="^foo")
def handle_subscribe(request, socket, context, channel):
print "Subscribing to: " + channel
socket.subscribe('foo')
socket.subscribe('bar')
Output:
Subscribing to: foo
Subscribing to: bar
I have a client connected.
Then I go and run ./manage.py shell
import django_socketio
django_socketio.broadcast('test')
After this, I always get:
NoSocket: There are no clients.
even though there clearly are.
Is this expected behavior? Can I not call any of these methods from outside the special socket io server? Is there any way to bypass this? It is not very useful to me if I can't interact with it from the "normal" HTTP server.
Thanks
In line 26 of socketio_scripts.html, it specifies "if ($.isArray(data)) {".
$.isArray is a jquery function.
Since socket.io doesn't require jquery, jquery probably shouldn't be used in django-socketio, but at the very least, the requirement should be stated somewhere.
example_project russian words sended but doesn't appears.
How to run it on webfaction without using runserver_socketio? (successfully run it using runserver_socketio)
I've setup the libraries as instructed (installed the Ubuntu dependencies, installed django_socketio
via PIP, added in the URLconf, put django_socketio
into my settings.py's INSTALLED_APPS
and run manage.py collectstatic
). I'm not a Django notice and I've worked with socket.io before, but I'm utterly stumped!
Client-side things seem to be OK: a socket connection is established and the connect
event is called; same for `disconnect, however no events fire at all on the server side.
In my models.py file, I've hooked up a function to the on_connect
, on_subscribe
and on_message
events and none of them run (I've discovered this by setting up logging. A log entry is written and output to the console that confirms the code is being run that hooks up the events, but nothing ever happens when the events take place).
Is this an issue with latter versions of the Websockets protocol as mentioned in your docs? I'm running the socket server as sudo (tried in daemon and shell mode), but I get nothing either way.
Any ideas?
Thanks!
The implementation of broadcast_channel limits the socket to only sending to channels that it is currently subscribed to. This limitation looks like as if it was was deliberately added, but I can't see a reason for not letting the socket send to channels it hasn't subscribed to. Admittedly, I may be missing something. Thoughts?
def broadcast_channel(self, message, channel=None):
"""
Send the given message to all subscribers for the channel
given. If no channel is given, send to the subscribers for
all the channels that this socket is subscribed to.
"""
if channel in self.channels:
channels = [channel]
else:
channels = self.channels
.......
Hi Stephenmcd ,
Do you have documentation to put socket.io django in production with the Apache Server?
Best Regards,
Eduardo Lujan
Hi,
I am trying to deploy a project that uses django-socketio in cloud provider webfaction. I have already managed to start the app using python manage.py runserver_socketio in the terminal. The problem is, when I logout, no longer the server broadcasts the messages, so the application stops working.
Maybe is something that I need to configure in httpd.conf of the apache server?
Thanks in advance,
Rodrigo Gil.
I'm using the chat example, and I'm getting some problems in the encoding. Specifically, if I use the letter "á" in a message inside a room, the connection drops.
To reproduce the error, use the example along with
sudo python manage.py runserver_socketio 127.0.0.1:9000
I just start using it, so I don't have so much experience to tackle the error. Nevertheless, I hope the attached log from the socket_io helps.
127.0.0.1 - - [2013-11-04 15:36:33] "Socket.IO message: {u'action': u'start', u'room': 3, u'name': u'test_subject'}"
Traceback (most recent call last):
File "/Users/user1/env/lib/python2.7/site-packages/gevent/greenlet.py", line 390, in run
result = self._run(*self.args, **self.kwargs)
File "/Users/user1/env/lib/python2.7/site-packages/socketio/server.py", line 49, in handle
handler.handle()
File "/Users/user1/env/lib/python2.7/site-packages/gevent/pywsgi.py", line 180, in handle
result = self.handle_one_request()
File "/Users/user1/env/lib/python2.7/site-packages/gevent/pywsgi.py", line 314, in handle_one_request
self.handle_one_response()
File "/Users/user1/env/lib/python2.7/site-packages/socketio/handler.py", line 68, in handle_one_response
jobs = self.transport.connect(session, request_method)
File "/Users/user1/env/lib/python2.7/site-packages/socketio/transports.py", line 101, in connect
return self.handle_post_response(session)
File "/Users/user1/env/lib/python2.7/site-packages/socketio/transports.py", line 67, in handle_post_response
messages = self.decode(data)
File "/Users/user1/env/lib/python2.7/site-packages/socketio/transports.py", line 16, in decode
return self.handler.environ['socketio'].decode(data)
File "/Users/user1/env/lib/python2.7/site-packages/socketio/protocol.py", line 113, in decode
messages.append(json.loads(data[3:size]))
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 326, in loads
return _default_decoder.decode(s)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 366, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 382, in raw_decode
obj, end = self.scan_once(s, idx)
ValueError: Expecting object: line 1 column 83 (char 83)
<Greenlet at 0x1027cd5f0: <bound method SocketIOServer.handle of <SocketIOServer at 0x10270e2d0 fileno=3 address=127.0.0.1:9000>>(<socket at 0x10275f450 fileno=[Errno 9] Bad file d, ('127.0.0.1', 57567))> failed with ValueError
Hi!
Is there any chance to get channel inside function decorated by:
@on_message(channel="^room-")
def my_chat_handler(request, socket, context, message):
# TODO: How can I get channel
...
I can get all channels connected with socket - but I just need this one, which sends message.
Currently I'm sending channel in message directly from JavaScript in my client - but I want to secure communication, by channel recognition on server.
I searched a lot but found nothing (Maybe I'm asking google wrong questions?). Maybe answer is very simple and obwious to You.
Please, help me. What can I do?
I added 'django_socketio' to my INSTALLED_APPS, and url("", include("django_socketio.urls")), to my urlpatterns. Other than that it's a pretty vanilla django 1.3 project.
Environment:
Request Method: GET
Request URL: http://localhost:8000/socket.io/
Django Version: 1.3.1
Python Version: 2.7.1
Installed Applications:
['django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
'django.contrib.admindocs',
'django_socketio']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware')
Traceback:
File "/Users/rbalfanz/.virtualenvs/django-ws/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
111. response = callback(request, *callback_args, **callback_kwargs)
File "/Users/rbalfanz/.virtualenvs/django-ws/lib/python2.7/site-packages/django_socketio/views.py" in socketio
45. CLIENTS[socket.session.session_id] = (request, socket, context)
Exception Type: AttributeError at /socket.io/
Exception Value: 'NoneType' object has no attribute 'session_id'
this iteration(clients.py):
for channel in socket.channels:
socket.unsubscribe(channel)
and this line in unsubscribe(channels.py)
self.channels.remove(channel)
it makes the iteration to skip some channels, because its uses the same list. I fixed this making a copy of channels
channels = socket.channels[:]
for channel in channels:
socket.unsubscribe(channel)
I could quite possibly be doing something wrong as I have only been toying around a little so far.
I am adding a realtime component to an existing application and have defined an events.py with functions ready to process for all the different events. The problem is that the only events firing are the connect, disconnect and message events. Subscribe and unsubscribe aren't being called at all even though they are in the same events.py.
Is this an issue or is there some other way I should be binding the subscription events?
Another question, when I run my django app through apache on port 80 and have socketio connect to :8080, the cookies from :80 aren't available even though the cookies set from port :80 are available if I access the django view through :8080. This last question is not a big issue as I have ways around it, it's the first one that is my main concern.
Thanks very much for making this app available as it is filling a need for me very nicely.
Hi,
I use django-socketio in order to build a chat. The problem is when I send messages with special characters. At first, it didn't work. So I used the solution to this question: #2
It fixed my problem. But then, I don't know why, it didn't work anymore. Now, when I try to send a message with special characters, I get this error:
File "path/gevent/socket.py", line 503, in sendall
data = data.encode()
So I went to socket.py and I changed data.encode by data.encode('utf-8', 'replace'). I don't have an error anymore, the messages appear. But when I enter a special character, the last letter of my message disappear. If I enter 2 special characters, the two last characters disappear...
Any idea on how to fix that?
thank you.
I keep getting the exception below when I try to run the server:
SocketIOServer running on 0.0.0.0:8000
Traceback (most recent call last):
File "./manage.py", line 14, in
execute_manager(settings)
File "/home/sky/development/py_environs/socket/local/lib/python2.7/site-packages/django/core/management/init.py", line 438, in execute_manager
utility.execute()
File "/home/sky/development/py_environs/socket/local/lib/python2.7/site-packages/django/core/management/init.py", line 379, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/sky/development/py_environs/socket/local/lib/python2.7/site-packages/django/core/management/base.py", line 191, in run_from_argv
self.execute(_args, *_options.dict)
File "/home/sky/development/py_environs/socket/local/lib/python2.7/site-packages/django/core/management/base.py", line 220, in execute
output = self.handle(_args, *_options)
File "/home/sky/development/py_environs/socket/local/lib/python2.7/site-packages/django_socketio/management/commands/runserver_socketio.py", line 57, in handle
server = SocketIOServer(bind, handler, resource="socket.io")
File "/home/sky/development/py_environs/socket/local/lib/python2.7/site-packages/socketio/server.py", line 22, in init
self.namespace = kwargs.pop('namespace')
KeyError: 'namespace'
Unhandled exception in thread started by <function reload_watcher at 0xa4c9a04>
Traceback (most recent call last):
File "/home/sky/development/py_environs/socket/local/lib/python2.7/site-packages/django_socketio/management/commands/runserver_socketio.py", line 24, in reload_watcher
RELOAD = code_changed()
TypeError: 'NoneType' object is not callable
I notice that when I do the install stage I get:
Downloading/unpacking django-socketio
Downloading django-socketio-0.3.1.tar.gz (43Kb): 43Kb downloaded
Running setup.py egg_info for package django-socketiofile django_socketio.py (for module django_socketio) not found
Downloading/unpacking gevent-socketio (from django-socketio)
I'm not sure if this has anything to do with it.
Hi,
I'm trying to implement Redis with django-socketio in a chat. So here is what I did:
def listener(self):
r = redis.StrictRedis()
r = r.pubsub()
r.subscribe('chat')
for m in r.listen():
message = m['data']
socket.send_and_broadcast_channel(message)
@events.on_message()
def messages(request, socket, context, message):
r = redis.Redis()
r.publish('chat', message)
But in order redis to work with gevent, we have to start a Greenlet when the user subscribes.
So we need to add something like that:
def on_subscribe(self, *args, **kwargs):
self.spawn(self.listener)
I tried to do that with django-socketio but I didn't figured how to do it.
Would you have any idea on how can I do the equivalent with django-socketio?
Thank you very much for your help.
Hi,
I'm just wondering if it is possible to host off two different ports simultaneously? When I try to do this I get the error above.
For example if I try something like
sudo python manage.py runserver_socketio 0.0.0.0:8000
then
sudo python manage.py runserver_socketio 0.0.0.0:8001
I get the error.
Firstly, thanks for creating this - I was on the brink of a Django + Node js solution and a considerable amount of unnecessary complexity before discovering your project.
It's likely this is user error but following the chat example fairly closely to get something up and running, and having trouble debugging.
Trying to send a simple message from Client A to Client B. Both clients call socket.subscribe() on doc ready, and I see the success event printed to the terminal. Client A then calls socket.send(), which also prints to the terminal, including the contents of the message. So far so good, except that the functions I have in my views module listening for on_message or on_subscribe events are never called. I'm not doing anything special, just:
@on_message
def message(request, socket, context):
print 'message received'
I've been pouring over the example code, and can't see what I must be missing. I see there's logging settings, but didn't find a log file in django_socketio, gevent or geventwebsocket modules -- is there a file generated, and if so do you know where I could find it?
The apt-get command is mistakenly as before_script when it should be before_install. This causes the headers not to be available when pip is run which causes pip to fail.
Socket.io provides the method: socket.emit(event_name, params, callback) where callback is a function that received data sent by the server with the ack message. This is used by backbone.iosync to populate backbone.js collections and models from the server over a socket.io connection. As far as I can tell, callbacks are not supported by django-socketio, making it unusable with backbone.iosync.
Hi,
We've been using this project on django 1.3. It works really well, thanks.
The only thing we had to tweak was an import in the packages root urls.py to make it compatible with 1.3:
# Patch for django 1.3 compatibility
try:
from django.conf.urls import patterns, url
except ImportError:
from django.conf.urls.defaults import patterns, url
Would you consider merging this fix in and updating the release on pypi?
Thanks,
John
Right now django-socketio it not ready for go to production :
the dependencies are out-update of the new implementation of moderm webbrowser
the setup.py said:
[1] gevent-socketio==0.2.1 out-updated this call a require:
install_requires=("gevent-websocket",),
This install the last version of gevent-websocket> 0.3.X but gevent-socketio==0.2.1 not work with gevent-websocket last version need gevent-websocket==0.2.3
So installing work more less even so have issues.
gevent-websocket with the new websocket improvements(as Jeffrey Gelens said) have a issue: [2] [3]
For get the django-socketio need this require:
gevent==0.13.8
gevent-socketio==0.2.1
gevent-websocket==0.2.3
django-socketio==0.3.8
then patch manually [2][3] and then it is working now.
Sorry dudes!!!
BUT:
I have 3 long nights of pain dealing with django-socketio trying to getting work.
Please put on the setup.py
install_requires=["gevent-socketio==0.2.1","gevent-websocket==0.2.3","gevent-socketio==0.2.1", "sphinx-me", "django>=1.4.8"],
The make the changes on [2] and [3] said and then the socketio works.
[1] https://github.com/abourget/gevent-socketio/blob/master/setup.py
[2] https://bitbucket.org/Jeffrey/gevent-websocket/issue/17/selfwebsocket_connection-not-defined-and
[3] https://bitbucket.org/Jeffrey/gevent-websocket/issue/11/keyerror-wsgiwebsocket
Keyword for finding bugs:
self.websocket_connection not defined
KeyError: 'wsgi.websocket
I am working on a web app using django and socket.io, and have been trying to use django-socketio to connect the two. I noticed that the the socketio client packaged with the app was using xhr-multipart and xhr-polling on the latest FireFox (10.0.2) and Chrome (17.0.963.56), respectively. I tried replacing the client library with the latest version (0.8.5) but now I get an error on the server side:
Traceback (most recent call last):
File "/home/taa/env/lib/python2.6/site-packages/gevent/pywsgi.py", line 438, in handle_one_response
self.run_application()
File "/home/taa/env/lib/python2.6/site-packages/gevent/pywsgi.py", line 425, in run_application
self.process_result()
File "/home/taa/env/lib/python2.6/site-packages/gevent/pywsgi.py", line 416, in process_result
self.write(data)
File "/home/taa/env/lib/python2.6/site-packages/gevent/pywsgi.py", line 373, in write
self.socket.sendall(msg)
File "/home/taa/env/lib/python2.6/site-packages/gevent/socket.py", line 504, in sendall
data_sent += self.send(_get_memory(data, data_sent), flags)
File "/home/taa/env/lib/python2.6/site-packages/gevent/socket.py", line 490, in send
return sock.send(data, flags)
error: [Errno 32] Broken pipe
<SocketIOServer fileno=3 address=0.0.0.0:8182>: Failed to handle request:
request = GET /socket.io/1/?t=1330535867416 HTTP/1.1 from ('216.16.232.86', 1154)
application = <django.contrib.staticfiles.handlers.StaticFilesHandler object at 0x2d0b950>
x.x.x.x - - [2012-02-29 11:17:52] "GET /socket.io/1/?t=1330535867416 HTTP/1.1" 500 0 0.384851
Any idea what the issue may be? And any plans to upgrade the socketio client library packaged with the app or make the app compatible or socketio-client v0.8.5?
I don't know much about the WebSocket protocol, but I'm willing to help however I can, such as testing different browsers and what not.
hi i got this error when running your chat application.
python manage.py runserver_socketio
SocketIOServer running on 127.0.0.1:9000
FAILED to start flash policy server: [Errno 13] Permission denied: ('0.0.0.0', 843)
is this because i am running this inside a virtualenv?
If you rapidly refresh with any browser, you'll eventually see something like this:
Traceback (most recent call last):
File "/srv/pyenv/costory/lib/python2.6/site-packages/gevent/greenlet.py", line 390, in run
result = self._run(*self.args, **self.kwargs)
File "/srv/pyenv/costory/lib/python2.6/site-packages/socketio/transports.py", line 211, in send_into_ws
websocket.send(self.encode(message))
File "/srv/pyenv/costory/lib/python2.6/site-packages/geventwebsocket/websocket.py", line 25, in send
self.socket.sendall("\x00" + message + "\xFF")
File "/srv/pyenv/costory/lib/python2.6/site-packages/gevent/socket.py", line 504, in sendall
data_sent += self.send(_get_memory(data, data_sent), flags)
File "/srv/pyenv/costory/lib/python2.6/site-packages/gevent/socket.py", line 478, in send
return sock.send(data, flags)
error: [Errno 32] Broken pipe
<Greenlet at 0x107d3e518: send_into_ws> failed with error
Traceback (most recent call last):
File "/srv/pyenv/costory/lib/python2.6/site-packages/gevent/greenlet.py", line 390, in run
result = self._run(*self.args, **self.kwargs)
File "/srv/pyenv/costory/lib/python2.6/site-packages/socketio/transports.py", line 215, in read_from_ws
message = websocket.wait()
File "/srv/pyenv/costory/lib/python2.6/site-packages/geventwebsocket/websocket.py", line 71, in wait
frame_str = self.rfile.read(1)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/socket.py", line 377, in read
data = self._sock.recv(left)
File "/srv/pyenv/costory/lib/python2.6/site-packages/gevent/socket.py", line 418, in recv
return sock.recv(*args)
error: [Errno 54] Connection reset by peer
<Greenlet at 0x107d3e490: read_from_ws> failed with error
This appears to prevent the on_finish event from executing.
Hey guys, I'm having trouble to run my server correctly.
I'm running my django server through the port 8088 and the socketio server in the port 9000. My connections are being logged in the socketio correctly:
"127.0.0.1 - - [2012-11-06 15:15:05] "GET /socket.io/websocket HTTP/1.1" 500 52474 0.120885
127.0.0.1 - - [2012-11-06 15:15:10] "GET /socket.io/xhr-polling//1352222110658 HTTP/1.1" 500 50095 0.051357"
But Chrome is having a cross origin problem:
"XMLHttpRequest cannot load http://localhost:9000/socket.io/xhr-polling//1352221950619. Origin http://localhost:8088 is not allowed by Access-Control-Allow-Origin."
So, please, I need some help to solve this.
Probably it's as simple as telling my SocketIO server too allow connections from anywhere, but I couldn't figure it out.
I just noticed that when I run 'runserver_socketio', my language setting of my settings.py is not respected anymore. The language is back to english.
Do you have any idea on how I can change it?
Thank you for your help.
When I run "runserver_socketio" and I try to load a web page with a typical and basic code in their views.py file, like this:
def example(request):
return render_to_response('example.html')
I get this error:
VariableDoesNotExist at /app/example/
Failed lookup for key [MEDIA_URL] in u"[[{'DJANGO_SOCKETIO_PORT': '8000'}]]"
...
Error during template rendering
In template /local/lib/python2.7/site-packages/django_socketio/templates/socketio_scripts.html, error at line 1
(Could not get exception message)
Then I check my settings.py and STATIC_URL = '/static/', and MEDIA_URL = '/media/'
Meanwhile, I have solved this error with not using {% socketio %} template tag, and calling directly the js script from template HTML code.
I'm using Django 1.4
I want to use NGINX as a forward proxy with my public ip . Using this configuration i managed to proxy using my local ip but i want it to be a public proxy using my public ip address. How can i do that ? Do i need port forwarding or some changes in my configuration ?
here is my nginx.conf:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;
server {
listen 8080;
location / {
resolver 8.8.8.8;
proxy_pass http://$http_host$uri$is_args$args;
}
}
}
Hi.
I'm not the greatest programmer but I was playing around with django-socketio. I was having some trouble "pushing" from the server side when using djangosocket.send().
Should the code in the init.py file read (about lines 10 - 20)
def send(session_id, message):
"""
Send a message to the socket for the given session ID.
"""
from django_socketio.views import CLIENTS # I HAD TO ADD THIS LINE
try:
socket = CLIENTS[session_id][1]
except KeyError:
raise NoSocket("There is no socket with the session ID: " + session_id)
socket.send(message)
I had to put it in anyway to get it working for me.
Thanks.
Up to now there is nothing about "apache" in the docs:
https://readthedocs.org/search/project/?q=apache&selected_facets=project_exact%3Adjango-socketio
Please add some information how it can be used with apache.
Do you need to open a new port, or is it possible to use the proxy module?
Thank you.
Its very sexy and has lots of new changes.
https://github.com/abourget/gevent-socketio
http://gevent-socketio.readthedocs.org/en/latest/index.html
Hello error code appears when sending Chinese, I do not know why.
I sincerely thank you please help me
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/gevent-0.13.8-py2.7-linux-x86_64.egg/gevent/greenlet.py", line 390, in run
result = self._run(_self.args, *_self.kwargs)
File "/usr/local/lib/python2.7/dist-packages/gevent_socketio-0.2.1-py2.7.egg/socketio/server.py", line 49, in handle
handler.handle()
File "/usr/local/lib/python2.7/dist-packages/gevent-0.13.8-py2.7-linux-x86_64.egg/gevent/pywsgi.py", line 180, in handle
result = self.handle_one_request()
File "/usr/local/lib/python2.7/dist-packages/gevent-0.13.8-py2.7-linux-x86_64.egg/gevent/pywsgi.py", line 314, in handle_one_request
self.handle_one_response()
File "/usr/local/lib/python2.7/dist-packages/gevent_socketio-0.2.1-py2.7.egg/socketio/handler.py", line 68, in handle_one_response
jobs = self.transport.connect(session, request_method)
File "/usr/local/lib/python2.7/dist-packages/gevent_socketio-0.2.1-py2.7.egg/socketio/transports.py", line 101, in connect
return self.handle_post_response(session)
File "/usr/local/lib/python2.7/dist-packages/gevent_socketio-0.2.1-py2.7.egg/socketio/transports.py", line 67, in handle_post_response
messages = self.decode(data)
File "/usr/local/lib/python2.7/dist-packages/gevent_socketio-0.2.1-py2.7.egg/socketio/transports.py", line 16, in decode
return self.handler.environ['socketio'].decode(data)
File "/usr/local/lib/python2.7/dist-packages/gevent_socketio-0.2.1-py2.7.egg/socketio/protocol.py", line 113, in decode
messages.append(json.loads(data[3:size]))
File "/usr/lib/python2.7/json/init.py", line 338, in loads
return _default_decoder.decode(s)
File "/usr/lib/python2.7/json/decoder.py", line 365, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python2.7/json/decoder.py", line 381, in raw_decode
obj, end = self.scan_once(s, idx)
ValueError: Unterminated string starting at: line 1 column 40 (char 39)
<Greenlet at 0x2b329b0: <bound method SocketIOServer.handle of <SocketIOServer at 0x28c4d90 fileno=3 address=127.0.0.1:9000>>(<socket at 0x2b36c50 fileno=[Errno 9] Bad file des, ('127.0.0.1', 48303))> failed with ValueError
Hi (sorry for my poor english):
I try to broadcast messages with "broadcast" function in a Django command management file, but always I get an exception (NoSocket, "There are no clients") and in the client-side I not get any message.
In my command management file I wrote:
from django_socketio import NoSocket, broadcast
from time import sleep
while True:
try:
broadcast({'message': 'Hello World'})
except NoSocket, e:
print e
sleep(15)
And in my template file I wrote:
{% load socketio_tags %}
{% socketio %}
<script type="text/javascript">
var socket = new io.Socket();
socket.connect();
socket.on('message', function(data) {
console.log(data.message);
});
</script>
Meanwhile, when I use the same python script inside events.py file with an "@on_connect" decorator, there are no problems.
I use Django 1.4.1 and django-socketio 0.3.5
Thanks for any help you can give me.
self.handle_one_response(call_wsgi_app=False)
TypeError: handle_one_response() got an unexpected keyword argument 'call_wsgi_app'
<Greenlet at 0x2824260: <bound method SocketIOServer.handle of <SocketIOServer a
t 0x27a7930 fileno=164 address=127.0.0.1:9000>>(<socket at 0x28bd650 fileno=[Err
no 9] Bad file des, ('127.0.0.1', 7480))> failed with TypeError
After several attempts all runs fine without exceptions. When I restart my computer, the same thing happens again. I'm looking for a more stable solution.
Internal Server Error: /socket.io/xhr-polling//1378592279609
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site
packages/django/core/handlers/base.py", line 115, in get_response
response = callback(request, *callback_args, **callback_kwargs)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django_socketio/views.py", line 19, in socketio
socket = SocketIOChannelProxy(request.environ["socketio"])
KeyError: 'socketio'
127.0.0.1 - - [2013-09-08 00:17:59] "GET /socket.io/xhr-polling//1378592279609 HTTP/1.1" 500 49818 0.152489
Would be great to be able to run selenium tests fro django-socketio.
..
from multiprocessing import Process
import os
...
def info(title):
print title
print 'module name:', name
if hasattr(os, 'getppid'): # only available on Unix
print 'parent process:', os.getppid()
print 'process id:', os.getpid()
def f(socket,session_id):
info('function f')
route = {"action": "buzz", 'foo':'bar'}
for i in range(1,5):
socked.send(route)
django_socketio.broadcast_channel(route, 'navigation')
django_socketio.send(session_id, route)
@events.on_message(channel="navigation")
def navigation(request, socket, context, message):
if message['action'] == 'theread':
try:
p = Process(target=f, args=(socket,socket.session.session_id))
p.start()
except:
print "Unexpected error thread:", sys.exc_info()[0]
...
socket.session.session_id is the same in thread that in main thread.
Why nothing is send to socket o brodcast_channel?
P.S. I need create other thread, becouse in my program i have large operation in loop.
Thanks
Hi Steve,
During build, running setup.py or during a pip install, neither templates or static directories are copied into the relevant location along with all the other files (everything else can confirm works flawlessly on set up). This means the {% socketio %} tag fails with a template error.
Copying the folders to my packages folder manually resolved the issue completely.
Cheers
Andrew
django_socketio.send gives me a keyerror when using a valid session_id and CLIENTS gives me an empty list when called from a function in views.py. It works ok when called from an event handler though.
The error Caught KeyError while rendering: 'DJANGO_SOCKETIO_PORT' appears.
It looks like it's not in the environment (why would it be?) Maybe I'm missing something here, though. A simple fix (?) is to do:
from django_socketio import settings as socketio_settings
then set it to socketio_settings.PORT.
Hey gang, sorry to bother!
I really appreciate all this work, it was super easy to setup and use. I'm confused on the best practices of setting up some kind of auth also. I'm making a chat/partner finder for online games, people login and there's a Terminal you can chat with other users at.
It would be totally fine if I could only force WebSocket (no long polling stuff or anything) so I can send cookies, right?
Hi,
I've read the docs and google around a lot, but I'm still confused as to how to extend an existing Apache/mod_wsgi/Django site to include some django-socketio functionality.
Can the runserver_socketio command run in parallel to Apache and just use a different port? Or does the custom server need to handle all requests?
I imagine many devs would be interested in adding this to an existing traditional project, so a tutorial would be really helpful.
BTW, I've also posted this question at stackoverflow.
Thanks very much,
Chris
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.