服务器响应回调函数,解决有关flask-socketio中服务端和客户端回调函数callback参数的问题(全网最全)...
由于工作當中需要用的flask_socketio,所以自己學習了一下如何使用,查閱了有關文檔,當看到回調函數callback的時候,發現文檔里都描述的不太清楚,最后終于琢磨出來了,分享給有需要的朋友
首先看看官方文檔及其譯文
看到這里以后,我就開始照著文檔敲代碼,發現即使我按照文檔里的寫法寫了,也沒有調用我們的回調函數ack
廢話不多說,直接上最終版代碼
index.html
index1$(document).ready(function () {
var socket = io.connect('http://127.0.0.1:8000/');
socket.on('connect', function () {
socket.emit('connect_event', {data: 'client,connected!'}); //客戶端向服務端發起請求鏈接
});
socket.on('server_response', function (msg, ack) {
$('#log').append('
' + $('
ack('client received'); //響應服務端的回調函數,告知服務端,客戶端已收到消息
});
socket.on('server_response1', function (msg) {
$('#log').append('
' + $('
// ack('msg'); //響應服務端的回調函數,告知服務端,客戶端已收到消息
});
$('#aa').click(function (event) {
socket.emit('client_event', {data: $('#emit_data').val()}, function (data) {
console.log("server received data", data); // 此處data為服務端發送過來的回調參數,說明服務端已收到客戶端的消息;
});
});
});
WebSokect
socket1.py
# -*- coding: utf-8 -*-
from flask import Flask, render_template
from flask_socketio import SocketIO, emit
app = Flask(__name__, template_folder='./')
socketio = SocketIO()
socketio.init_app(app)
def ack(data): # 服務端回調函數
print u'客戶端已收到消息,回調參數為',data # 服務端回調函數的參數
@app.route('/')
def index():
return render_template('index.html')
@socketio.on('client_event')
def client_msg(msg):
print msg
emit('server_response', {'data': msg['data']}, callback=ack) # 指定服務端回調函數為ack,參數由客戶端指定
return 'server received data!' # 客戶端回調函數的參數
@socketio.on('connect_event')
def connected_msg(msg):
print u'客戶端建立請求,信息為:',msg['data']
emit('server_response1', {'data': msg['data']})
if __name__ == '__main__':
socketio.run(app, debug=True, host='0.0.0.0', port=8000)
其實,我想說的已經全部放在了注釋里了,
總結一下,在測試中遇到的問題吧
服務端:在emit中,指定callback,
客戶端:在socket.on的function里,有兩個參數
第一個參數,是用來接收服務端return
如果我們只寫一個就是監聽server_response里的信息,這個參數msg就代表收到的信息
當我們指定了第二個參數時(可以不和服務端的回調函數ack同名),這個參數就是
on用來監聽對應通道,emit向對應通道發送消息
socket.on中,第一個參數為通道的名字,第二個參數為一個函數function
function中,可以有兩個參數,第一個參數是用來接收服務端return的值,第二個參數是回調函數名(隨便取)
如果服務端在emit中指定了callback,就比如上圖,如果希望客戶端收到消息后給服務端回傳一個消息,觸發服務端的callback即ack函數,則這第二個參數必須指定,否則不會觸發
如果在服務端沒有指定callback,但是在客戶端指定了第二個參數,則在頁面上會報錯,如下圖
必須對應好,才不會出錯
使用flask_socketio實現服務端向客戶端定時推送
websocket連接是客戶端與服務器之間永久的雙向通信通道,直到某方斷開連接. 雙向通道意味著在連接時,服務端隨時可以發送消息給客戶端,反之亦然,這在一些需要即時通訊的場景比如多人聊天室非常重要. ...
app開發中如何利用sessionId來實現服務端與客戶端保持回話
app開發中如何利用sessionId來實現服務端與客戶端保持回話 這個問題太過于常見,也過于簡單,以至于大部分開發者根本沒有關注過這個問題,我根據和我溝通的開發者中,總結出來常用的方法有以下幾種: ...
(轉)客戶端觸發Asp.net中服務端控件事件
第一章.?Asp.net中服務端控件事件是如何觸發的 Asp.net 中在客戶端觸發服務端事件分為兩種情況: 一. WebControls中的Button 和HtmlControls中的Type為su ...
(轉)SVN 服務端、客戶端安裝及配置、導入導出項目
SVN服務器搭建和使用(一) Subversion是優秀的版本控制工具,其具體的的優點和詳細介紹,這里就不再多說. 首先來下載和搭建SVN服務器. 現在Subversion已經遷移到apache網站上 ...
【轉】TCP/UDP簡易通信框架源碼,支持輕松管理多個TCP服務端(客戶端)、UDP客戶端
[轉]TCP/UDP簡易通信框架源碼,支持輕松管理多個TCP服務端(客戶端).UDP客戶端 目錄 說明 TCP/UDP通信主要結構 管理多個Socket的解決方案 框架中TCP部分的使用 框架中UDP ...
openssl實現雙向認證教程(服務端代碼+客戶端代碼+證書生成)
一.背景說明 1.1 面臨問題 最近一份產品檢測報告建議使用基于pki的認證方式,由于產品已實現https,商量之下認為其意思是使用雙向認證以處理中間人形式攻擊. 中接觸過 ...
oauth2.0服務端與客戶端搭建
oauth2.0服務端與客戶端搭建 - 推酷 今天搭建了oauth2.0服務端與客戶端.把搭建的過程記錄一下.具體實現的功能是:client.ruanwenwu.cn的用戶能夠通過 server.ru ...
vertx 從Tcp服務端和客戶端開始翻譯
寫TCP 服務器和客戶端 vert.x能夠使你很容易寫出非阻塞的TCP客戶端和服務器 創建一個TCP服務 最簡單的創建TCP服務的方法是使用默認的配置:如下 NetServer server = ve ...
隨機推薦
使用批處理(bat)腳本對目錄樹下同種性質的目錄或文件進行處理
問題起源:每次從svn管理的目錄下面復制目錄之后里面總是有很多.svn的目錄,雖說不影響使用但看著很礙眼.同時自己也懶得使用svn的export功能. 因此一個簡單的批處理腳本可以幫助我們搞定一切,當 ...
ds.Merge 與 ds.Tables[0].Merge 的用法
DataSet ds = new DataSet(); SqlConnection conn = new SqlConnection(ConnectionStr);??????????? SqlCom ...
javascript 筆記(待續)
1.基礎對象 ?var o=new Object(); ?o.xxx=1; o.xx=2; ? ?var 01={xxx=1,xx=2} 2.==與=== ? "5"==5 Tru ...
java寫文件時,輸出不完整的原因以及解決方法close()或flush()
在java的IO體系中,寫文件通常會用到下面語句 BufferedWriter bw=new BufferedWriter(new FileWriter("sql語句.txt")) ...
mint17上建立lamp環境
使用apt-get方式是最簡單的也是最快捷穩定的在桌面linux環境下. ? 分別執行如下命令: ? (1)安裝MYSQL ? sudo apt-get install mysql-server ? ...
[POJ 1637] Sightseeing tour(網絡流)
題意 (混合圖的歐拉回路判定) 給你一個既存在有向邊, 又存在無向邊的圖. 問是否存在歐拉回路. \(N ≤ 200, M ≤ 1000\) 題解 難點在于無向邊. 考慮每個點的度數限制. 我們先對無 ...
python之tkinter使用-復選框操作
# tkinter復選框操作 import tkinter as tk root = tk.Tk() root.title('問卷調查') root.geometry('220x80') # 設置窗口 ...
【沒有注意過的細節】用scanf讀一個unsigned char? %hhu 的用法
頭段時間我的代碼,有一個 unsigned char,我需要從sscanf 中讀取字符串為這個值.但是一般char 是用%c的,我是要值得. 所以我使用了%d %u來讀,結果報警告: unsigned ...
python函數入門
知識內容: 1.函數的作用 2.函數的定義與調用 3.函數的返回值 4.函數的參數 5.局部變量與全局變量 6.作用域 一.函數的作用 1.復用代碼 將可能重復執行的代碼封裝成函數,并在需要執行的地方 ...
73.Vivado使用誤區與進階——在Vivado中實現ECO功能
關于Tcl在Vivado中的應用文章從Tcl的基本語法和在Vivado中的應用展開,繼上篇介紹了如何擴展甚至是定制FPGA設計實現流程后,引出了一個 ...
總結
以上是生活随笔為你收集整理的服务器响应回调函数,解决有关flask-socketio中服务端和客户端回调函数callback参数的问题(全网最全)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 天然 什么饵料更适合黑坑鲤鱼?
- 下一篇: 黑金花大理石_黑色系大理石的首选——黑金