1.多人聊天

from geventwebsocket.handler import WebSocketHandler  # 请求处理WSGI HTTP
from geventwebsocket.server import WSGIServer # 替换Flask原来的WSGI服务
from geventwebsocket.websocket import WebSocket # 语法提示
from flask import Flask, render_template, request app = Flask(__name__)
socket_dict = {} @app.route("/ws")
def my_ws():
ws_socket = request.environ.get("wsgi.websocket")# type:WebSocket
socket_dict[ws_socket] = ws_socket # 可以使用用户名,使用动态路由参数传username
print(socket_dict)
while True:
msg = ws_socket.receive()
print(msg)
for ksocket,vscoket in socket_dict.items():
if ksocket == ws_socket:
continue
vscoket.send(msg) @app.route("/wechat")
def wechat():
return render_template("测试用.html") if __name__ == "__main__": http_serv = WSGIServer(("0.0.0.0", 9527), app, handler_class=WebSocketHandler)
# WebSocketHandler既支持websocket请求,也支持http请求
http_serv.serve_forever() # wsgi启动服务
<!DOCTYPE html>
<html lang="en">
<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>
body #content_list {
border: solid black;
width: 400px;
height: 400px;
}
</style>
</head>
<body>
<div id="content_list" style="overflow-y: auto"></div>
<p>
昵称:<input type="text" id="username">
<button onclick="login()">登录聊天室</button>
</p>
<input type="text" id="content">
<button onclick="send_msg()">发送消息</button>
</body>
<script type="application/javascript">
var ws = null; function send_msg() {
var msg = document.getElementById("content").value; //获取发送内容
var sender = document.getElementById("username").value; //获取发送人名字
// 发送的信息内容
var send_str = {
sender: sender,
data: msg
}; ws.send(JSON.stringify(send_str)); // 将发送的信息json序列化
var my_div = document.getElementById("content_list"); // 获取div标签
var ptag = document.createElement("p"); // 创建一个p标签
ptag.innerText = msg + " : 我"; // 设置p标签中的文本内容
ptag.style.cssText = "text-align: right"; // p标签设置css样式,文本靠右
my_div.appendChild(ptag); // 将p标签添加进div标签中
document.getElementById("content").value = "";
} function login() {
var username = document.getElementById("username").value; // 获取登录用户名
console.log(username);
ws = new WebSocket("ws://127.0.0.1:9527/ws"); // 执行websocket服务,如果需要username,可以在url上增加
// 当客户端收到消息时,执行匿名函数
ws.onmessage = function (messageEvent) {
console.log(messageEvent.data);
var obj = JSON.parse(messageEvent.data); // 将接收的数据反序列化
var my_div = document.getElementById("content_list"); // 获取div标签
var ptag = document.createElement("p"); // 获取p标签
ptag.innerText = obj.sender + " : " + obj.data; // 设置p标签中文本内容
my_div.appendChild(ptag); // 将p标签放到div中
};
}
</script>
</html>

2.一对一聊天

import json
from geventwebsocket.handler import WebSocketHandler # 请求处理WSGI HTTP
from geventwebsocket.server import WSGIServer # 替换Flask原来的WSGI服务
from geventwebsocket.websocket import WebSocket # 语法提示
from flask import Flask,render_template,request app = Flask(__name__)
socket_dict = {}
@app.route("/ws/<username>")
def my_ws(username):
# 获取链接地址
ws_socket = request.environ.get("wsgi.websocket") #type:WebSocket
socket_dict[username] = ws_socket
while True:
msg = ws_socket.receive() # 接收浏览器发来的信息
msg_dict = json.loads(msg) # 将信息反序列化,是字典
receiver = msg_dict.get("receiver") # 获取字典中接收人的名字
receiver_socket = socket_dict.get(receiver) # 从字典中找到接收人名字对应的链接地址
receiver_socket.send(msg) # 向接收人的链接地址发送信息
@app.route("/wechat")
def wechat():
return render_template("测试用.html")
if __name__ == "__main__":
http_serv = WSGIServer(("0.0.0.0",9527),app,handler_class=WebSocketHandler)
# WebSocketHandler既支持websocket请求,也支持http请求
http_serv.serve_forever() # wsgi启动服务
<!DOCTYPE html>
<html lang="en">
<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>
body #content_list {
border: solid black;
width: 400px;
height: 400px;
}
</style>
</head>
<body>
<div id="content_list" style="overflow-y: auto"></div>
<p>
昵称:<input type="text" id="username">
<button onclick="login()">登录聊天室</button>
</p>
给<input type="text" id="receiver">发送<input type="text" id="content">
<button onclick="send_msg()">发送消息</button>
</body>
<script type="application/javascript">
var ws = null; function send_msg() {
var msg = document.getElementById("content").value; //获取发送内容
var receiver = document.getElementById("receiver").value; // 获取接收人名字
var sender = document.getElementById("username").value; //获取发送人名字
// 发送的信息内容
var send_str = {
receiver: receiver,
sender: sender,
data: msg
}; ws.send(JSON.stringify(send_str)); // 将发送的信息json序列化
var my_div = document.getElementById("content_list"); // 获取div标签
var ptag = document.createElement("p"); // 创建一个p标签
ptag.innerText = msg + " : 我"; // 设置p标签中的文本内容
ptag.style.cssText = "text-align: right"; // p标签设置css样式,文本靠右
my_div.appendChild(ptag); // 将p标签添加进div标签中
document.getElementById("content").value = ""; //将聊天输入框置空
} function login() {
var username = document.getElementById("username").value; // 获取登录用户名
ws = new WebSocket("ws://127.0.0.1:9527/ws/" + username); // 执行websocket服务
// 当客户端收到消息时,执行匿名函数
ws.onmessage = function (messageEvent) {
console.log(messageEvent.data);
var obj = JSON.parse(messageEvent.data); // 将接收的数据反序列化
var my_div = document.getElementById("content_list"); // 获取div标签
var ptag = document.createElement("p"); // 获取p标签
ptag.innerText = obj.sender + " : " + obj.data; // 设置p标签中文本内容
my_div.appendChild(ptag); // 将p标签放到div中
};
}
</script>
</html>

websocket简单实现聊天的更多相关文章

  1. JAVA WebSocKet ( 简单的聊天室 )

    1, 前端代码 登入页 -> login.html <!DOCTYPE html> <html> <head> <meta charset=" ...

  2. python使用websocket简单组建聊天室

    server端 ###websocket_server### import socket import threading sock = socket.socket(socket.AF_INET, s ...

  3. Spring 学习——基于Spring WebSocket 和STOMP实现简单的聊天功能

    本篇主要讲解如何使用Spring websocket 和STOMP搭建一个简单的聊天功能项目,里面使用到的技术,如websocket和STOMP等会简单介绍,不会太深,如果对相关介绍不是很了解的,请自 ...

  4. Netty学习笔记(六) 简单的聊天室功能之WebSocket客户端开发实例

    在之前的Netty相关学习笔记中,学习了如何去实现聊天室的服务段,这里我们来实现聊天室的客户端,聊天室的客户端使用的是Html5和WebSocket实现,下面我们继续学习. 创建客户端 接着第五个笔记 ...

  5. Netty+WebSocket简单实现网页聊天

    基于Netty+WebSocket的网页聊天简单实现 一.pom依赖 <dependency>        <groupId>io.netty</groupId> ...

  6. nodejs与websocket模拟简单的聊天室

    nodejs与websocket模拟简单的聊天室 server.js const http = require('http') const fs = require('fs') var userip ...

  7. 基于websocket实现的一个简单的聊天室

    本文是基于websocket写的一个简单的聊天室的例子,可以实现简单的群聊和私聊.是基于websocket的注解方式编写的.(有一个小的缺陷,如果用户名是中文,会乱码,不知如何处理,如有人知道,请告知 ...

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

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

  9. Java和WebSocket开发网页聊天室

    小编心语:咳咳咳,今天又是聊天室,到现在为止小编已经分享了不下两个了,这一次跟之前的又不大相同,这一次是网页聊天室,具体怎么着,还请各位看官往下看~ Java和WebSocket开发网页聊天室 一.项 ...

随机推荐

  1. Windows程序设计(七)--鼠标

    7.2 客户区鼠标消息 当鼠标移过窗口的显示区域时,窗口消息处理程序收到WM_MOUSEMOVE消息.当在窗口的显示区域中按下或者释放一个鼠标按键时,窗口消息处理程序会接收到下面这些消息: 键 按下 ...

  2. 靶场练习--sqli(1&2)

    前言 懒猪赵肥肥耍了3天3夜,每天除了练英语口语,啥子都没干.今天开始发愤图强,嘻嘻~ 计划内容有:靶场.视频.python.PHP.java.计算机英语. 首先,每天必搞靶场必看视频必学java和英 ...

  3. 二、RabbitMQ操作

    1.RabbitMQ发送与接收. 2.RabbitMQ发送与接收. 3.RabbitMQ发送与接收.

  4. https://geewu.gitbooks.io/rabbitmq-quick/content/RabbitMQ%E5%9F%BA%E7%A1%80%E6%93%8D%E4%BD%9C.html

    https://geewu.gitbooks.io/rabbitmq-quick/content/RabbitMQ%E5%9F%BA%E7%A1%80%E6%93%8D%E4%BD%9C.html

  5. tmux使用——2019年11月20日16:40:15

    1.tmux 命令行的典型使用方式是,打开一个终端窗口(terminal window,以下简称"窗口"),在里面输入命令.用户与计算机的这种临时的交互,称为一次"会话& ...

  6. Debian取消从光盘安装软件的方式(please insert the disc labeled)

    与Ubuntu不同,使用apt-get install packages时Debian可能会提示: Media change: please insert the disc labeled 'Debi ...

  7. 0-3为变长序列建模modeling variable length sequences

    在本节中,我们会讨论序列的长度是变化的,也是一个变量 we would like the length of sequence,n,to alse be a random variable 一个简单的 ...

  8. 拦截Restful API的三种方式

    如题, 方式有三种. (1). 过滤器filter javaEE规范 (2). 拦截器interceptor springmvc提供 (3). 切片 aspect 一. Filter使用示例 impo ...

  9. jquery设置、判断、获取input单选标签选中状态

    1.设置某项单选input为选中状态: $("input[type='radio']").eq(1).attr('checked',true); ②也可设其属性checked为'c ...

  10. js中的投掷筛子的小游戏

    代码 <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...