websocket聊天室
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聊天室的更多相关文章
- WebSocket聊天室demo
		根据Socket异步聊天室修改成WebSocket聊天室 WebSocket特别的地方是 握手和消息内容的编码.解码(添加了ServerHelper协助处理) ServerHelper: using ... 
- Netty入门(一)之webSocket聊天室
		一:简介 Netty 是一个提供 asynchronous event-driven (异步事件驱动)的网络应用框架,是一个用以快速开发高性能.高可靠性协议的服务器和客户端. 换句话说,Netty 是 ... 
- 使用.NET Core和Vue搭建WebSocket聊天室
		博客地址是:https://qinyuanpei.github.io. WebSocket是HTML5标准中的一部分,从Socket这个字眼我们就可以知道,这是一种网络通信协议.WebSocket是 ... 
- 用Java构建一个简单的WebSocket聊天室
		前言 首先对于一个简单的聊天室,大家应该都有一定的概念了,这里我们省略用户模块的讲解,而是单纯的先说说聊天室的几个功能:自我对话.好友交流.群聊.离线消息等. 今天我们要做的demo就能帮我们做到这一 ... 
- php +html5 websocket 聊天室
		针对内容比较长出错,修改后的解码函数 和 加码函数 原文请看上一篇 http://yixun.yxsss.com/yw3104.html function uncode($str,$key){ $ma ... 
- koa2+webSocket 聊天室
		做了一个简单的的聊天室,用来看看 koa和 websocket的使用还是挺好的,已经放到gitHub. https://github.com/zhaowanhua/koa2WebSocket 
- 实现一个简单的WebSocket聊天室
		WebSocket 简介 WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议. WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主 ... 
- tornado websocket聊天室
		1.app.py #!/usr/bin/env python # -*- coding:utf-8 -*- import uuid import json import tornado.ioloop ... 
- 基于springboot的websocket聊天室
		WebSocket入门 1.概述 1.1 Http #http简介 HTTP是一个应用层协议,无状态的,端口号为80.主要的版本有1.0/1.1/2.0. #http1.0/1.1/2.0 1.HTT ... 
随机推荐
- C++ 顺序表练习
			#include <stdio.h> #include <stdlib.h> #include <string.h> struct Array //定义一个数据存储 ... 
- LeetCode(不用加号的加法)
			题目: 设计一个函数把两个数相加,不得使用+或者其他算数运算符. 示例: 输入:a=1,b=1 输出:2 提示: a,b均有可能是负数或0 结果不会溢出32位整数 初始思路: 看到题目我就明白只能用位 ... 
- touch事件中的touches、targetTouches和changedTouches
			touches: 当前屏幕上所有触摸点的列表; targetTouches: 当前对象上所有触摸点的列表; changedTouches: 涉及当前(引发)事件的触摸点的列表; 通过一个例子来区分一下 ... 
- 从 Spring 的环境到 Spring Cloud 的配置
			需求 不知不觉,web 开发已经进入 “微服务”.”分布式” 的时代,致力于提供通用 Java 开发解决方案的 Spring 自然不甘人后,提出了 Spring Cloud 来扩大 Spring 在微 ... 
- 面向对象第四单元(UML)及期末总结
			前言 统一建模语言(英语:Unified Modeling Language,缩写 UML),是软件架构设计建模和规约的语言. 在UML系统开发中有三个主要的模型: 功能模型:从用户的角度展示系统的功 ... 
- Python-操作XML文件
			一.python对XML文件的操作 目录 1.xml 创建 2.xml 数据查询 3.xml 数据修改 4.xml 数据删除 二. 1.xml 创建 import xml.etree.ElementT ... 
- demo26-路径
			<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ... 
- P5020 货币系统 题解
			原题链接 简要题意: 求一个长度最小的货币系统与给出的货币系统等价.求这个货币系统的长度.等价的定义详见题目,不再赘述. 本文可能用到一些集合论,请放心食用. 算法一 \(n=2\) 时,只需判断两个 ... 
- 性能计数器在.NET Core中的新玩法
			传统的.NET Framework提供的System.Diagnostics.PerformanceCounter类型可以帮助我们收集Windows操作系统下物理机或者进程的性能指标,基于Perfor ... 
- coding++:java—提取Html文本字符串中的内容
			package com.tree.ztree_demo; import java.util.regex.Matcher; import java.util.regex.Pattern; public ... 
