使用flask_socketio实现客户端间即时通信

前期没有来得及好好总结,现在复习总结一下:

Socket.IO 背后主要的思想是你可以发送和接收想要的任何事件,携带你想要的任何数据。任何可以编码为 JSON 的对象都可以做到,并且也支持二进制数据。

1.Express 初始化 app 作为功能处理器,你可以将它传给 HTTP 服务器。

2.定义一个路由处理器 / ,当我们访问网站主页时就会调用这个处理器。

3.HTTP 服务器监听端口 3000。

通过传递 http(HTTP 服务器)对象初始化了一个 socket.io 的新实例。然后为到来的 socket 监听 connection 事件,并且输入日志到控制台。

这将加载 socket.io-client,创建全局变量 io,并且连接

下一个目标是我们从服务器发送事件给其他用户。

为了发送事件给所有人,Socket.IO 给我们提供了 io.emit:

io.emit(‘some event‘, { for: ‘everyone‘ });

如果你想发送一个确定 socket 的消息给所有人,我们有 broadcast 标识:

io.on(‘connection‘, function(socket){
  socket.broadcast.emit(‘hi‘);
});

下面是参考:http://www.cnblogs.com/luozx207/p/9719597.html

 关于flask_socketio的入门可以看我的上一篇博客《使用flask_socketio实现服务端向客户端定时推送》

  用socketio实现即时通信十分简单,只需要客户端发送用户输入的信息到后端,后端再将此信息广播到所有连接到此命名域的客户端就可以了。

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

app = Flask(__name__)
app.config[‘SECRET_KEY‘] = ‘secret!‘
socketio = SocketIO(app)

@app.route(‘/‘)
def index():
    return render_template(‘index.html‘)

@socketio.on(‘imessage‘, namespace=‘/test_conn‘)
def test_message(message):
    emit(‘message‘,//后端广播信息的事件名最好跟前端发送信息的事件名不一样
         {‘data‘: message[‘data‘]},
         broadcast=True)

if __name__ == ‘__main__‘:
    socketio.run(app, debug=True)

  关键就是要在emit中加broadcast=True这一项,如果不加,只有发送信息的客户端能收到消息

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
    <script type="text/javascript" src="//code.jquery.com/jquery-1.4.2.min.js"></script>
    <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/socket.io/1.3.5/socket.io.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function() {
            namespace = ‘/test_conn‘;
            var socket = io.connect(location.protocol + ‘//‘ + document.domain + ‘:‘ + location.port + namespace);       //连接后发送日志
            socket.on(‘connect‘, function(){
              console.log(‘connected‘)
            });       //点击发送时将text框的内容发送到后端
            $(‘form#emit‘).submit(function(event) {
                socket.emit(‘imessage‘, {data: $(‘#emit_data‘).val()});
                return false;
            });        //接收后端广播的信息
            socket.on(‘message‘, function(msg) {
                $(‘#log‘).append(‘<br>‘ + $(‘<div/>‘).text(msg.data).html());
            });
        });
    </script>
</head>
<body>
  <form id="emit" method="POST" action=‘#‘>
      <input type="text" name="emit_data" id="emit_data" placeholder="Message">
      <input type="submit" value="发送">
  </form>
  <h2>Receive:</h2>
  <div id="log"></div>
</body>
</html>

  打开两个网页都连接到http://127.0.0.1:5000/,测试一下,一个网页发送的信息在另一个网页也可以及时收到。一个简陋的多人聊天系统完成了:)

原文地址:https://www.cnblogs.com/Dark-fire-liehuo/p/10052401.html

时间: 2025-01-17 10:23:12

使用flask_socketio实现客户端间即时通信的相关文章

android 两个客户端间的通信(Socket通信)

客户端之间通信:    实际上两个客户端不能直接通信,要借助服务器来做为中转站,才能实现双方通信. 一个客户端发送数据到服务器,服务器将数据发送给(所有连接上服务器的)客户端,这样客户端之间实现了通信. 服务器的代码: public class PcService {            private static final int SERVICEPORT=10086;            private static ArrayList<Socket> mClientList=new

基于XMPP协议的Android即时通信系

以前做过一个基于XMPP协议的聊天社交软件,总结了一下.发出来. 设计基于开源的XMPP即时通信协议,采用C/S体系结构,通过GPRS无线网络用TCP协议连接到服务器,以架设开源的Openfn'e服务器作为即时通讯平台. 系统主要由以下部分组成:一是服务器,负责管理发出的连接或者与其他实体的会话,接收或转发XML(ExtensibleMarkup Language)流元素给授权的客户端.服务器等:二是客户终端.它与服务器相连,通过XMPP获得由服务器或任何其它相关的服务所提供的全部功能.三是协议

[转] 基于XMPP协议的Android即时通信系

转自:http://blog.csdn.net/lnb333666/article/details/7471292 以前做过一个基于XMPP协议的聊天社交软件,总结了一下.发出来. 设计基于开源的XMPP即时通信协议,采用C/S体系结构,通过GPRS无线网络用TCP协议连接到服务器,以架设开源的Openfn'e服务器作为即时通讯平台. 系统主要由以下部分组成:一是服务器,负责管理发出的连接或者与其他实体的会话,接收或转发XML(ExtensibleMarkup Language)流元素给授权的客

结束QQ即时通信垄断,开辟即时通信互联互通instantnet时代

蓬勃发展的即时通信产业 即时通信(IM)是指能够即时发送和接收互联网消息等的业务. 即时通信,就是瞬间把信息发送给对方,如果不是即时发送的,我们就说离线的,email邮件式的,不是立即看见的. 即时通信开始是短消息的,也可以发长文件,微博也是短消息的,传文件我们一般不叫即时通信. 不过即时通信已经发展成集交流.资讯.娱乐.搜索.电子商务.办公协作和企业客户服务等为一体的综合化信息平台. 这样即时通信范围就大了,但是这时候已经是一个综合化信息平台,不是单纯的发送消息. 我们目前还是定位在即时通信就

(转)基于即时通信和LBS技术的位置感知服务(三):搭建Openfire服务器+测试2款IM客户端

主要包含4个章节: 1. Java 领域的即时通信的解决方案 2. 搭建 Openfire 服务器 3. 使用客户端测试我们搭建的 Openfire 服务器 4. Smack 和 ASmack 一.Java领域的即时通信的解决方案 Java领域的即时通信的解决方案可以考虑openfire+spark+smack. 1. Openfire是基于Jabber协议(XMPP)实现的即时通信服务器端版本,目前最新的版本为3.6.4,网上可以找到下载的源代码. 2. 即时通信客户端可使用spark2.5.

(转)基于即时通信和LBS技术的位置感知服务(二):XMPP协议总结以及开源解决方案

在<基于即时通信和LBS技术的位置感知服务(一):提出问题及解决方案>一文中,提到尝试使用XMPP协议来实现即时通信.本文将对XMPP协议框架以及相关的C/S架构进行介绍,协议的底层实现不再本文的讨论范围. 一.什么是XMPP? 介 绍XMPP之前,我们先来聊聊GTalk.GTalk是Google推出的IM(Instant Messaging,即时通讯)软件,类似于QQ和MSN.从技术角度来说,GTalk与QQ和MSN的差异是使用了不同的通讯协议,QQ使用了自己的私 有协议(未公开),MSN也

线程间的通信、同步方式与进程间通信方式

1.线程间的通信方式 1)使用全局变量(由于多个线程可能更改全局变量,因此全局变量最好声明为volatile) 2) 使用消息实现通信 3)使用事件CEvent类实现线程间的通信 2.同步/异步(C端) 同步:在C端发出一个功能调用时,没有得到结果之前就不返回 异步: 一个请求通过事件触发后,得到服务器处理后才处理完毕 3. 阻塞/非阻塞(S端) 阻塞:阻塞调用是指调用结果返回之前,当前线程会被挂起(线程进入非可执行状态,在这个状态下,cpu不会给线程分配时间片,即线程暂停运行).函数只有在得到

Android 使用AIDL实现进程间的通信

在Android中,如果我们需要在不同进程间实现通信,就需要用到AIDL技术去完成. AIDL(android Interface Definition Language)是一种接口定义语言,编译器通过*.aidl文件的描述信息生成符合通信协议的Java代码,我们无需自己去写这段繁杂的代码,只需要在需要的时候调用即可,通过这种方式我们就可以完成进程间的通信工作.关于AIDL的编写规则我在这里就不多介绍了,读者可以到网上查找一下相关资料. 接下来,我就演示一个操作AIDL的最基本的流程. 首先,我

java即时通信小例子

学习java一段时间了,今天写来一个即时通信的小例子练手在其过程中也学到了一些知识拿出来和大家分享,请路过的各位大神多多赐教... 好了下面讲一下基本的思路: 首先,编写服务器端的程序,简单点说吧就是在服务上开启一个线程循环等待客户端的连接,为每一个连接到服务器的Socket 创建一个实例存放在集合中,然后使用InputSteam读取从客户端发过来的数据然后转发给除自己之外的所有的客户端 然后是客户端,首先开启一个线程连接都服务器端,循环监听服务器发送回来的数据 这里要说一下为了明确是谁发出的消