1.Django+websocket

django-websocket

dwebsocket

django-websocket是旧版的,现在已经没有人维护,dwebsocket是新版的,推荐使用dwebsocket。

python manage.py runserver --port 8000

用这两个库,django用以上的命令启动的时候,可以正常建立websocket连接的

但是如果django用uwsgi启动,会报错:handshake的时候返回400,即客服端不合法

dwebsocket的README.md里面写着可以通过下面的修改来实现从uwsgi启动

1.在settings.py增加WEBSOCKET_FACTORY_CLASS变量

2.修改uwsgi的启动命令为:

uwsgi --http :8000 --http-websockets --processes 1  --wsgi-file django_wsgi.py --async 30 --ugreen --http-timeout 300

但是我试过之后失败了

2.Django+uwsgi+websocket

后面我发现uwsgi2.0已经提供了对websocket的支持

uwsgi文档

DEMO:

def echo_once(request):
import uwsgi
uwsgi.websocket_handshake() #与客户端建立连接 ,在uwsgi2.0中,这个函数不需要参数
while True:
msg = uwsgi.websocket_recv() #阻塞,等待客户端发来的消息
uwsgi.websocket_send(msg) #发送消息到客服端

所有的API:

uwsgi.websocket_handshake([key, origin, proto])

uwsgi.websocket_recv()

uwsgi.websocket_send(msg)

uwsgi.websocket_send_binary(msg) (added in 1.9.21 to support binary messages)

uwsgi.websocket_recv_nb()

uwsgi.websocket_send_from_sharedarea(id, pos) (added in 1.9.21, allows sending directly from a SharedArea – share memory pages between uWSGI components)

uwsgi.websocket_send_binary_from_sharedarea(id, pos) (added in 1.9.21, allows sending directly from a SharedArea – share memory pages between uWSGI components)

3.nginx的配置:

            location / {
uwsgi_pass 127.0.0.1:8000;
include uwsgi_params;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}

在nginx的server中加入proxy开头的三行配置

4.调试用的python websocket客户端

from websocket import create_connection
ws = create_connection("ws://192.168.000.000:8000/echo_once")
print "Sending 'Hello, World'..."
ws.send("Hello, World")
print "Sent"
print "Reeiving..."
result = ws.recv()
print "Received '%s'" % result
ws.close()

Nginx+uWSIG+Django+websocket的实现的更多相关文章

  1. Nginx + uwsgi + django + websocket(dwebsocket)环境部署

    1.安装nginx(/export/servers/nginx/) 保证/export/servers/nginx/是nginx的安装目录 /export/servers/nginx/conf/dom ...

  2. debian完整部署 Nginx + uWSGI + Django

    手工部署一个Django服务器真心不容易,需要安装很多东西.从头开始搭建服务器,主要是为了梳理一下后续开发中一般为碰到的平台部署.对后续问题的解决有一定帮助. 通常部署有2中方式: 一种是使用现成提供 ...

  3. Nginx+uWSGI+Django环境配置

    通常项目会部署在虚拟环境,虚拟环境的使用可以参考这里,点击前往 当然你也可以直接部署,这里不多说. 一.安装uWSGI 1.通过pip安装 pip install uwsgi 这里只说明了一种安装方式 ...

  4. 基于腾讯云CentOS7.4+MySQL5.7+Python3+uwsgi+nginx的Django项目部署

    准备知识 1.django一个基于python的开源web框架,请确保自己熟悉它的框架目录结构. 2.uWSGI一个基于自有的uwsgi协议.wsgi协议和http服务协议的web网关 3.nginx ...

  5. Centos7 + nginx 托管 Django 项目

    使用nginx托管django服务的原理 使用uwsgi开启django服务(通过配置文件启动) 防火墙关闭uwsgi端口(uwsgi的websocket一定要使用127.0.0.1的方式配置)) 编 ...

  6. 10、nginx+uwsgi+django部署(动静分离)

    10.1.说明: 1.介绍: 创建Django项目,可以通过 pyhon3 manage.py runserver 0.0.0.0:8080 & 命令更方便地调试程序,但是如果当一个项目完成了 ...

  7. Ubuntu上通过nginx部署Django笔记

    Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式.今天在Ubuntu上使用Nginx部署Django服务,虽然不是第一次搞这个了,但是发现还是跳进了好多坑,g ...

  8. 五步教你实现使用Nginx+uWSGI+Django方法部署Django程序

    Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式. 在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求.ng ...

  9. 通过Nginx部署Django(基于ubuntu)

    Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式. 在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求.ng ...

随机推荐

  1. [设计模式1]--单例模式(SINGLETON)

    搞笑解释: 俺有6个漂亮的老婆,她们的老公都是我,我就是我们家里的老公Sigleton,她们只要说道“老公”,都是指的同一个人,那就是我 定义: 单例模式确保某一个类只有一个实例,而且自行实例化并向整 ...

  2. 各I/O模型 对应Web服务应用模型(select,poll,epoll,kevent,"/dev/poll")

    一.利用select多路复用I/O的Web服务应用模型  /* 可读.可写.异常三种文件描述符集的申明和初始化.*/ fd_set readfds, writefds, exceptionfds; F ...

  3. MATLAB-ginput函数问题

    functions:Graphical input from mouse or cursor ginput提供了一个十字光标使我们能更精确的选择我们所需要的位置,并返回坐标值.函数调用形式为: [x, ...

  4. C语言的一些误用和知识总结

    现在学嵌入式的话,最主要是要把C语言熟悉,比如指针,链表,共用体,结构体等,还是得听老师的话.. 在学习单片机的时候才真正知道C语言是什么它是来干什么的~但是C语言用到嵌入式只是它小小的一部分他的应用 ...

  5. 求关注 wcf bindipendpointdelegate 端口限制的功能

    我最近也需要实现一个功能:1)一个客户端(192.168.0.15),10个服务端(提供A接口.B接口)如下:      192.168.0.1-5685       192.168.0.2-5685 ...

  6. CSS 수직 가운데 정렬 (테이블 없이!) Vertical Centering with CSS

    이 방법은 테이블처럼 만들어서 테이블의 vertical-align 속성을 사용할 수 있도록 를 몇 개 세팅한다. (테이블의 vertical-align 속성은 다른 요소들에서는 굉장 ...

  7. 用DataSet方式更新数据库表

    /* 用DataSet的方式更新数据库表 * 注意:用DataSet更新数据库表的时候,该表必须指定主键或者是唯一列 */ string connString = "Data Source= ...

  8. C++多态性与C#的比较

        多态性:统一操作作用于不同的对象可以有不同的解释,产生不同的执行结果.多态性可以分为两种:一是编译时的多态性,一是运行时的多态性.     编译时的多态性包括重载.覆盖.运算符重载.对于非虚的 ...

  9. ASP.NET MVC 4应用程序文件夹

    App_Start It has configuration classes to reduce clutter code in the Global.asax 它包含了配置类来减少在Global.a ...

  10. $(document).ready() 、 $('#id').load() 、window.onload 的区别

    今天做项目的时候遇到一个问题,结果死在了$(document).ready(). $('#id').load() .window.onload的区别上.然后,就整理一下,这三者的区别. 参考文章:ht ...