a. 安装

	pip3 install gevent-websocket 

	作用:
- 处理Http、Websocket协议的请求 -> socket
- 封装Http、Websocket相关数据 -> request

b. 基本结构

	from geventwebsocket.handler import WebSocketHandler
from gevent.pywsgi import WSGIServer @app.route('/test')
def test():
ws = request.environ.get('wsgi.websocket')
ws.receive()
ws.send(message)
ws.close()
return render_template('index.html') if __name__ == '__main__':
http_server = WSGIServer(('0.0.0.0', 5000,), app, handler_class=WebSocketHandler)
http_server.serve_forever()

c. WEB聊天室:

	后端:
from geventwebsocket.handler import WebSocketHandler
from gevent.pywsgi import WSGIServer
from flask import Flask,render_template,request
import pickle app = Flask(__name__)
app.secret_key = 'xfsdfqw' @app.route('/index')
def index():
return render_template('index.html') WS_LIST = [] @app.route('/test')
def test():
ws = request.environ.get('wsgi.websocket')
if not ws:
return '请使用WebSocket协议'
# websocket连接已经成功
WS_LIST.append(ws)
while True:
# 等待用户发送消息,并接受
message = ws.receive() # 关闭:message=None
if not message:
WS_LIST.remove(ws)
break for item in WS_LIST:
item.send(message) return "..." if __name__ == '__main__':
http_server = WSGIServer(('0.0.0.0', 5000,), app, handler_class=WebSocketHandler)
http_server.serve_forever() 前端:
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Title</title>
<style>
.msg-item{
padding: 5px;
border: 1px;
margin: 0 5px;
}
</style>
</head>
<body>
<h1>首页</h1>
<div>
<h2>发送消息</h2>
<input id="msg" type="text" /> <input type="button" value="发送" onclick="sendMsg()">
<h2>接收消息</h2>
<div id="container"> </div>
</div> <script src="/static/jquery-3.3.1.min.js"></script>
<script> ws = new WebSocket('ws://192.168.12.42:5000/test');
ws.onmessage = function (event) {
var tag = document.createElement('div');
tag.className = 'msg-item';
tag.innerText = event.data;
$('#container').append(tag);
} function sendMsg() {
ws.send($('#msg').val());
} </script>
</body>
</html>

d. tornado.websocket示例

			import tornado
from tornado.web import Application
from tornado.web import RequestHandler
from tornado.websocket import WebSocketHandler class IndexHandler(RequestHandler): def get(self, *args, **kwargs):
# self.write('Hello World')
self.render('index.html') def post(self, *args, **kwargs):
user = self.get_argument('user')
self.write('成功') WS_LIST = []
class MessageHandler(WebSocketHandler): def open(self, *args, **kwargs):
WS_LIST.append(self) def on_message(self, message):
for ws in WS_LIST:
ws.write_message(message) def on_close(self):
WS_LIST.remove(self) settings = {
'template_path':'templates',
'static_path':'static',
} app = Application([
(r"/index", IndexHandler),
(r"/message", MessageHandler),
],**settings) if __name__ == '__main__':
app.listen(address='0.0.0.0',port=9999)
tornado.ioloop.IOLoop.instance().start()

WebSocket 在烧瓶和龙卷风中的应用的更多相关文章

  1. Tornado.web.Application之-settings

    应用程序配置 class  tornado.web.Application(handlers:List [Union [Rule,Tuple]] = None,default_host:str = N ...

  2. 漫扯:从polling到Websocket

    Http被设计成了一个单向的通信的协议,即客户端发起一个request,然后服务器回应一个response.这让服务器很为恼火:我特么才是老大,我居然不能给小弟发消息... 轮询 老大发火了,小弟们自 ...

  3. 细说WebSocket - Node篇

    在上一篇提高到了 web 通信的各种方式,包括 轮询.长连接 以及各种 HTML5 中提到的手段.本文将详细描述 WebSocket协议 在 web通讯 中的实现. 一.WebSocket 协议 1. ...

  4. java使用websocket,并且获取HttpSession,源码分析

    转载请在页首注明作者与出处 http://www.cnblogs.com/zhuxiaojie/p/6238826.html 一:本文使用范围 此文不仅仅局限于spring boot,普通的sprin ...

  5. WebSocket - ( 一.概述 )

    说到 WebSocket,不得不提 HTML5,作为近年来Web技术领域最大的改进与变化,包含CSS3.离线与存储.多媒体.连接性( Connectivity )等一系列领域,而即将介绍的 WebSo ...

  6. php+websocket搭建简易聊天室实践

    1.前言 公司游戏里面有个简单的聊天室,了解了之后才知道是node+websocket做的,想想php也来做个简单的聊天室.于是搜集各种资料看文档.找实例自己也写了个简单的聊天室. http连接分为短 ...

  7. Demo源码放送:打通B/S与C/S !让HTML5 WebSocket与.NET Socket公用同一个服务端!

    随着HTML5 WebSocket技术的日益成熟与普及,我们可以借助WebSocket来更加方便地打通BS与CS -- 因为B/S中的WebSocket可以直接连接到C/S的服务端,并进行双向通信.如 ...

  8. Cowboy 开源 WebSocket 网络库

    Cowboy.WebSockets 是一个托管在 GitHub 上的基于 .NET/C# 实现的开源 WebSocket 网络库,其完整的实现了 RFC 6455 (The WebSocket Pro ...

  9. 借助Nodejs探究WebSocket

    文章导读: 一.概述-what's WebSocket? 二.运行在浏览器中的WebSocket客户端+使用ws模块搭建的简单服务器 三.Node中的WebSocket 四.socket.io 五.扩 ...

随机推荐

  1. 解决hash冲突的办法

    1.开发定址法 2.再哈希法 3.链地址法 4.建立一个公共溢出区

  2. NHibernate应用开发

    第一章:NHibernate入门       第一讲:NHibernate架构剖析       第二讲:搭建第一个NHibernate应用程序       第三讲:nhibernate.cfg.xml ...

  3. Powerdesiger使用技巧

    1.问题:使用CDM在生成LDM文件时,每次都生成Name(LDM)1,Name(LDM)2这样 , 同时遇到一个莫名其妙的问题,就是LDM或者PDM生成到了整个工程外的目录下 疑问回答:是因为原有的 ...

  4. java synchronized和(ReentrantLock)区别

    原文:http://blog.csdn.net/zheng548/article/details/54426947 区别一:API层面 syschronized使用 synchronized即可修饰方 ...

  5. jquery扩展鼠标mousewheel事件

    最近项目中要有个鼠标在图片上滚动实现图片放大和缩小的得到功能,隐约的记得好像记得有个 mousewheel 事件,可以实现需求,于是乎,开始在网上查找这一方法,但是,出乎意料的结果,各浏览器对此方法有 ...

  6. AFNetworking 3.0 解决加密后请求参数是字符串问题

    把整个请求参数的json加密生成一个字符串传给服务器,错误提示:[NSJSONSerialization dataWithJSONObject:options:error:]: Invalid top ...

  7. 使用KNN算法手写体识别

    #!/usr/bin/python #coding:utf-8 import numpy as np import operator import matplotlib import matplotl ...

  8. SVN使用—概念及生命周期

    一.SVN简介 Apache Subversion 通常被缩写成 SVN,是一个开放源代码的版本控制系统,Subversion 在 2000 年由 CollabNet Inc 开发,现在发展成为 Ap ...

  9. J2EE--Struts2基础开发笔记

    内容中包含 base64string 图片造成字符过多,拒绝显示

  10. JavaWeb Listener

    1. 监听器概述 1.1. 什么是监听器 做过Swing或者AWT图像界面Java程序开发的话,应该对Listener与Event非常熟悉.Swing或者AWT中通过Listener与Event来处理 ...