websocket方法总结

# 后端  3个
class ChatConsumer(WebsocketConsumer):
def websocket_connect(self, message):
"""客户端请求建立链接时 自动触发"""
self.accept() # 建立链接 并且自动帮你维护每一个客户端 def websocket_receive(self, message):
"""客户端发送数据过来 自动触发"""
# print(message) # message = {'type': 'websocket.receive', 'text': 'hello world!'}
text = message.get('text') # 真正的数据
# 给客户端发送消息
self.send(text_data='介绍女朋友') def websocket_disconnect(self, message):
"""客户端断开链接之后 自动触发"""
raise StopConsumer() # 前端 4个
var ws = new WebSocket('ws://127.0.0.1:8000/home/'); // 1 握手环节验证成功之后 自动触发 onopen
ws.onopen = function () {
console.log('握手成功')
} // 2 给服务端发送消息 send
function sendMsg() {
ws.send($('#txt').val())
} // 3 一旦服务端有消息 自动触发 onmessage
ws.onmessage = function (args) {
// console.log(args) // args是一个对象
// 获取发送的数据
console.log(args.data)
} // 4 断开链接之后 自动触发 onclose
ws.onclose = function () {
ws.close()
}

群聊功能

我们是通过自己维护一个列表存储链接对象的方式完成了简易版本的群聊

其实channels给你提供了一个用于做群聊的模块,该模块可以实现真正的分组聊天

该模块就是channel-layers

基于websocket聊天室(版本一)

routing.py

from channels.routing import ProtocolTypeRouter,URLRouter
from django.conf.urls import url
from app01 import consumers application = ProtocolTypeRouter({
'websocket':URLRouter([
# 书写websocket路由与视图函数对应关系
url(r'^home/',consumers.ChatConsumer)
])
})

consumers.py

from channels.exceptions import StopConsumer
from channels.generic.websocket import WebsocketConsumer consumer_object_list = []
class ChatConsumer(WebsocketConsumer):
def websocket_connect(self, message):
"""客户端请求建立链接时 自动触发"""
self.accept() # 建立链接 并且自动帮你维护每一个客户端
consumer_object_list.append(self) # 来一个用户添加到列表中 def websocket_receive(self, message):
"""客户端发送数据过来 自动触发"""
# print(message) # message = {'type': 'websocket.receive', 'text': 'hello world!'}
text = message.get('text') # 真正的数据
# 循环给每一个客户端发送消息,模拟同步
for obj in consumer_object_list:
obj.send(text_data=text) def websocket_disconnect(self, message):
"""客户端断开链接之后 自动触发"""
consumer_object_list.remove(self)
raise StopConsumer()

home.html

<body>
<h1>聊天室</h1>
<input type="text" id="txt">
<button onclick="sendMsg()">发送</button> # 绑定事件 <h1>聊天记录</h1>
<div class="record"></div> <script>
# 帮我们自动完成握手环节
var ws = new WebSocket('ws://127.0.0.1:8000/home/'); // 1 握手环节验证成功之后 自动触发 onopen
ws.onopen = function () {
console.log('握手成功')
} // 2 给服务端发送消息 send
function sendMsg() {
ws.send($('#txt').val())
} // 3 一旦服务端有消息 自动触发 onmessage
ws.onmessage = function (args) {
// console.log(args) // args是一个对象
// 获取发送的数据
// 1 创建p标签
var pEle = $('<p>');
pEle.text(args.data); # 获取后端传过来的数据,并放进p标签
$('.record').append(pEle) # 添加p标签
} // 4 断开链接之后 自动触发 onclose
ws.onclose = function () {
ws.close()
}
</script>
</body>

websocket聊天室的更多相关文章

  1. WebSocket聊天室demo

    根据Socket异步聊天室修改成WebSocket聊天室 WebSocket特别的地方是 握手和消息内容的编码.解码(添加了ServerHelper协助处理) ServerHelper: using ...

  2. Netty入门(一)之webSocket聊天室

    一:简介 Netty 是一个提供 asynchronous event-driven (异步事件驱动)的网络应用框架,是一个用以快速开发高性能.高可靠性协议的服务器和客户端. 换句话说,Netty 是 ...

  3. 使用.NET Core和Vue搭建WebSocket聊天室

    博客地址是:https://qinyuanpei.github.io.  WebSocket是HTML5标准中的一部分,从Socket这个字眼我们就可以知道,这是一种网络通信协议.WebSocket是 ...

  4. 用Java构建一个简单的WebSocket聊天室

    前言 首先对于一个简单的聊天室,大家应该都有一定的概念了,这里我们省略用户模块的讲解,而是单纯的先说说聊天室的几个功能:自我对话.好友交流.群聊.离线消息等. 今天我们要做的demo就能帮我们做到这一 ...

  5. php +html5 websocket 聊天室

    针对内容比较长出错,修改后的解码函数 和 加码函数 原文请看上一篇 http://yixun.yxsss.com/yw3104.html function uncode($str,$key){ $ma ...

  6. koa2+webSocket 聊天室

    做了一个简单的的聊天室,用来看看 koa和 websocket的使用还是挺好的,已经放到gitHub. https://github.com/zhaowanhua/koa2WebSocket

  7. 实现一个简单的WebSocket聊天室

    WebSocket 简介 WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议. WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主 ...

  8. tornado websocket聊天室

    1.app.py #!/usr/bin/env python # -*- coding:utf-8 -*- import uuid import json import tornado.ioloop ...

  9. 基于springboot的websocket聊天室

    WebSocket入门 1.概述 1.1 Http #http简介 HTTP是一个应用层协议,无状态的,端口号为80.主要的版本有1.0/1.1/2.0. #http1.0/1.1/2.0 1.HTT ...

随机推荐

  1. Python基础篇_实例练习(二)

    问题1:假设有同学A,A每周在工作日进步,周末退步,问一年(365天)后A同学是一年前的几倍? 工作日进步由用户输入,周末下降0.01即1% deyup = eval(input()) deyfact ...

  2. appium移动自动化详解

    1移动自动化简介 移动自动化就是通过代码来控制手机,模拟人的动作,对手机进行一些点击,输入等操作,那python代码如何能控制到手机呢?目前的思路应该是python代码->Appium-pyth ...

  3. 数据结构和算法:Python实现二分查找(Binary_search)

    在一个列表当中我们可以进行线性查找也可以进行二分查找,即通过不同的方法找到我们想要的数字,线性查找即按照数字从列表里一个一个从左向右查找,找到之后程序停下.而二分查找的效率往往会比线性查找更高. 一. ...

  4. Vulnhub 靶场 Dijnn WP

    About djinn: 1 描述 难度级别:中等 Flag:user.txt和root.txt 说明:该计算机是VirtualBox以及VMWare兼容的.DHCP将自动分配IP.您将在登录屏幕上看 ...

  5. mysql刷题(不定时更新)

    面试阶段大家基本都会问一些mysql的题,具体的高深理论以后再慢慢补充,但是刷题是不可避免的,下面直接上货 创建/删除表和索引系列 创建表 CREATE TABLE if not exists `te ...

  6. Swift 4.0 字符串(String)学习

    定义字符串常量(常量只有读操作) let lString = "constant" let lString1: String = "constant" 定义字符 ...

  7. Android ListView显示访问WebServices返回的JSON结果

    1.WebServices的返回结果 2.ListView内容布局代码 <?xml version="1.0" encoding="utf-8"?> ...

  8. Oracle job启动与关闭

    --查看job下次执行时间以及间隔时间 select * from dba_jobs where job = '774'; --启动job exec dbms_job.run(774); --停用jo ...

  9. POJ1144 tarjan+网络中割点与割边的数量

    题目链接:http://poj.org/problem?id=1144 割点与割边的数量我们可以通过tarjan的思想从一个点开始对其余点进行访问.访问的顺序构成一棵dfs树,其中根节点到任何一个结点 ...

  10. windows10 64位 安装mysql服务端 并使用navicat客户端链接 掉的一堆坑

    1.目的 安装mysql服务端 并使用navicat客户端链接 2.过程 1)下载mysql服务端 下载过程(参考https://blog.csdn.net/youxianzide/article/d ...