如何使用socket.io连接Flask中的多个客户端?

时间:2016-04-22 22:40:22

标签: python flask-socketio

我想从socket.io客户端获取Flask服务器中的数据。我的设置是:

  1. Client1在服务器上调用方法request_data。
  2. 方法request_data然后在Client2上发出'client2'事件。
  3. 我的烧瓶服务器中有以下方法:

    $(document).ready(function (){
    //some code ....
    
    var listTable = $('#listTable').DataTable({
                    'fnCreatedRow': function (nRow, aData, iDataIndex) {
                    $(nRow).attr('id', 'my' + iDataIndex);
                    $(nRow).attr('name', 'my' + iDataIndex); // or whatever you choose to set as the id
                    },
                    "tableTools": {
                            "sSwfPath": "http://cdn.datatables.net/tabletools/2.2.2/swf/copy_csv_xls_pdf.swf",
                            "aButtons": [
                                {
                                    "sExtends": "copy",
                                    "sButtonText": "Copy To ClipBoard",
                                },
                                {
                                    "sExtends": "xls",
                                    "sFileName": "*.xls",
                                    "sButtonText": "Download XLS",
                                },
                                {
                                    "sExtends": "print",
                                }                          
                         ]
                      },
                      "bInfo": false,
                      "sEmptyTable": "There are no records",
                      "processing": true,
                      "oLanguage": {
                            "sProcessing": "<img src='${request.contextPath}/images/ajax-loader.gif'>"
                    },
                    "dom": '<"toolbar">T<"clear">lfrtip',
                    "order": [[ 1, "desc" ]]
        });
    
        $('.dataTables_empty').html("");
    
    //some more code 
    //some url
    listTable.ajax.url(url).load()
    
        });
    

    在应该接收数据的客户端上:

    <div id="data_table_travelHistory" style="margin:0 auto; padding-top:10px; width:90%;">
                  <table cellpadding="0" cellspacing="0" border="0"  id="listTable" style="width:100%;" class="table table-striped table-bordered">
                  <thead class="alignCenter">
                     <tr>
              <th class="headerclass">Start Date</th>
              <th class="headerclass">Approval Status</th>
              <th class="headerclass">Created On</th>
              <th class="headerclass">Action</th>
                    </tr>
                  </thead>
                  <tbody></tbody>
                  <tfoot  class="alignCenter headerclass">
                     <tr>
              <th class="headerclass">Start Date</th>
              <th class="headerclass">Approval Status</th>
              <th class="headerclass">Created On</th>
              <th class="headerclass">Action</th>
                     </tr>
                  </tfoot>
                  </table>
               </div>
    

    但我似乎无法建立与client2的连接。我在这做错了什么?

1 个答案:

答案 0 :(得分:0)

当您在未明确指示收件人的情况下调用emit函数时,该事件将被发送回调用者,在您的示例中,调用者是将client1事件发送到服务器的客户端。 / p>

如果要发送到其他客户端,则需要知道其会话ID(或sid)。在任何处理程序中,您都可以使用request.sid来获取发件人的会话ID。例如,您可以编写一个连接处理程序来记录附加到应用程序特定数据的会话ID,然后当您想要将内容发送到特定客户端时,执行以下操作:

emit('client2', {'data': 'testdata'}, room=get_sid_for_user(username))

此处room参数指定将消息发送到哪个房间。所有用户都有一个以会话ID命名的默认会议室。