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