实现websocket多人聊天,很简单

简介:

go?

http://localhost:8080/chats/1
http://localhost:8080/chats/1

房间号相同的人能聊天

Flask Server

# -*- coding: utf-8 -*-

from flask import Flask, render_template
from flask_socketio import SocketIO, rooms

app = Flask(__name__)
app.config['SECRET_KEY'] = 'sldjfalsfnwlemnw'

socketio = SocketIO(app)

@app.route('/chats/<int:room_id>')
def index(room_id):
    return render_template('chat.html', room_id=room_id)

@socketio.on('chat_send')
def chat_send(json):
    print 'chat_send: ', str(json)
    room_id = None
    if json.get('room_id', None):
        room_id = json['room_id']

    socketio.emit('chat_recv_{room_id}'.format(room_id=room_id), json)

if __name__ == '__main__':
    socketio.run(app, host='0.0.0.0', port=8080, debug=True)
AI 代码解读

templates/chat.html

<!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">
    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
    <title>Python Chat App Yo</title>

    <!-- Bootstrap -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
    integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">

    <style>
      div.msg_bbl {
        background-color: #ddd;
        padding: 5px 10px;
        border-radius: 10px;
        color: #555;
        margin-bottom: 5px;
      }
    </style>

    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
  </head>
  <body>

    <div class="text-center well"><b>WebScoket APP test.</b></div>

    <div class="container">
      <div class="col-sm-8">
        <div class="no_message">
          <h1 style='color: #ccc'>没有任何消息..</h1>
          <div class="message_holder"></div>
        </div>
      </div>
      <div class="col-sm-4">
        <form action="" method="POST">
          <b>输入你的消息并发送 <span class="glyphicon glyphicon-arrow-down"></span></b>
          <div class="clearfix" style="margin-top: 5px;"></div>
          <input type="text" class="username form-control" placeholder="User Name">
          <div style="padding-top: 5px;"></div>
          <input type="text" class="message form-control" placeholder="Messages">
          <div style="padding-top: 5px;"></div>
          <button type="submit" class="btn btn-success btn-block"><span class="glyphicon glyphicon-send"></span> Send</button>
        </form>
      </div>
    </div>

    <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.7.3/socket.io.min.js"></script>

    <script>
      // 1. 监听connect事件
      var socket = io.connect('http://' + document.domain + ':' + location.port);

      socket.on('connect', function () {

          var form = $('form').on('submit' ,function (e) {
              e.preventDefault();

              // 1.1 获取对象
              let user_name = $('input.username').val();
              let message   = $('input.message').val();

              // 1.2 发送数据到socket服务器
              socket.emit('chat_send', {
                  room_id : {{ room_id }} ,
                  username : user_name,
                  message : message
              });
              $('input.message').val('').focus();
          });
      });

      // 2. 监听response事件,服务器返回数据,并更新数据
      socket.on('chat_recv_{{ room_id }}', function (data) {
          // 数据发送到聊天框
          console.log(data);
          $('h1').remove();
          let text = '<div class="msg_bbl"><b>' + data.username+ '</b> ' +data.message+ '</div>';
          $('div.message_holder').append(text);
      });

    </script>
  </body>
</html>
AI 代码解读

example:

实现websocket多人聊天,很简单

ISSUE

  1. 走Reids 队列时hang住
  2. 房间号socket.io 没找到函数原型,不知道怎么调,走了个取巧的方式。




本文转自 煮酒品茶 51CTO博客,原文链接:http://blog.51cto.com/cwtea/2066342,如需转载请自行联系原作者

目录
打赏
0
0
0
0
235
分享
相关文章
|
11月前
使用uniapp实现websocket聊天功能
使用uniapp实现websocket聊天功能
PyQt5链接WebSocket,可以实现简易QQ聊天
PyQt5链接WebSocket,可以实现简易QQ聊天
273 0
webSocket+Node+Js实现在线聊天(包含所有代码)
文章介绍了如何使用WebSocket、Node.js和JavaScript实现在线聊天功能,包括完整的前端和后端代码示例。
373 0
odoo17在线聊天报错提示 Couldn‘t bind the websocket...
当 Odoo 17 报错 "Couldn't bind the websocket..." 时,通过检查和配置 WebSocket 端口、防火墙规则、代理服务器以及 Odoo 配置文件,可以有效解决此问题。确保每一步操作准确无误,最终重启相关服务,使配置生效。希望这些步骤能帮助您快速恢复 Odoo 的在线聊天功能。
168 1
基于Tomcate、java、websocket 简单在线聊天
基于Tomcate、java、websocket 简单在线聊天
124 0
t-io websocket的聊天功能学习记录(二)
t-io websocket的聊天功能学习记录(二)
147 0
|
11月前
t-io websocket的聊天功能学习记录(一)
t-io websocket的聊天功能学习记录(一)
163 0
❤Nodejs 第十五章(简单websocket聊天实现)
【4月更文挑战第15天】本文介绍了在Node.js中实现简单WebSocket聊天的过程。首先通过`yarn`创建项目并安装`ws`和`express`依赖。接着,编写`WebSocketServer.js`建立WebSocket服务器,处理客户端连接、消息收发及错误。然后,用`server.js`创建一个静态文件服务器,提供`index.html`。`index.html`包含客户端的WebSocket连接和消息处理。启动两个服务器后,可以在浏览器中打开`index.html`进行聊天。最后,讨论了在Node.js 20+Vite环境下使用WebSocket时可能遇到的问题
100 0
SpringBoot集成WebSocket实现及时通讯聊天功能!!!
SpringBoot集成WebSocket实现及时通讯聊天功能!!!
447 0