使用Flask-socketIO即时消息传递

时间:2017-06-13 09:18:17

标签: python flask flask-socketio

我想使用Flask + Flask-soketIO实现即时消息服务器。 客户端在手机上(前面在Ionic 2中)

我已经尝试过使用socketIO的不同聊天室示例,但我想知道如何管理多个用户一两聊聊。

我还不熟悉即时消息体系结构。关于这个问题,我有几个问题:

  • 首先,Flask是一个实现手机应用即时通讯的好框架吗? 我确实从Flask开始,因为它看起来很强大而且不像django那么重。
  • 在使用sokcetIO的即时通讯应用程序中,如何逐个连接用户? 我尝试了这段代码,但它适用于同一个聊天室中的多个用户:

在客户端:

    <script type="text/javascript">
        $(document).ready(function() {
            var socket = io.connect("http://127.0.0.1:5000");
            socket.on('connect', function() {
                 console.log('connected')
            });
            socket.on('message',function(msg){
                $("#messages").append('<li>' + msg + '</li>');
            });
            $("#sendButton").on('click', function() {
                console.log($('#myMessage').val());
                socket.send({ 'author': 'Kidz55',
                              'message': $('#myMessage').val()});
                $('#myMessage').val('');
            });
        });
    </script>

在服务器端:

@socketio.on('message')
def handle_json(json):
    print('received json: ' + str(json))
    # broadcasting to everyone who 's connected
    send(json,,broadcast=True)
  • 它是否具有可扩展性,是否支持大量流量?

1 个答案:

答案 0 :(得分:1)

  

在使用sokcetIO的即时消息应用中,如何逐个连接用户?

如果总是两个用户聊天,那么他们可以互相发送直接消息。当客户端连接时,会为其分配会话ID或sid。如果您跟踪这些ID并将其映射到您的用户,则可以向特定用户发送消息。例如,如果在用户数据库中存储用户的sid值,则可以按如下方式向该用户发送直接消息:

emit('private_message', {'msg': 'hello!'}, room=user.sid)
  

它是否可扩展,是否支持大量流量?

有许多因素会影响服务器可以处理的流量。 Flask-SocketIO服务器是可扩展的,因为如果单个进程无法处理流量,您可以添加更多进程,基本上为您提供了大量增长空间。