1. 程式人生 > >Python通過websocket與js客戶端通訊示例

Python通過websocket與js客戶端通訊示例

這裡,介紹如何使用 Python 與前端 js 進行通訊。

websocket 使用 HTTP 協議完成握手之後,不通過 HTTP 直接進行 websocket 通訊。

於是,使用 websocket 大致兩個步驟:使用 HTTP 握手,通訊。

js 處理 websocket 要使用 ws 模組; Python 處理則使用 socket 模組建立 TCP 連線即可,比一般的 socket ,只多一個握手以及資料處理的步驟。

握手

過程

包格式

js 客戶端先向伺服器端 python 傳送握手包,格式如下:

?
1 2 3 4 5 6 7 8 GET /chat HTTP/1.1 Host: server.example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== Sec-WebSocket-Protocol: chat, superchat Sec-WebSocket-Version: 13

伺服器迴應包格式:

?
1 2 3 4 5 HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo= Sec-WebSocket-Protocol: chat

其中, Sec-WebSocket-Key 是隨機的,伺服器用這些資料構造一個 SHA-1 資訊摘要。

方法為: key+migic , SHA-1  加密, base-64 加密,如下:


Python 中的處理程式碼

?
1 2 MAGIC_STRING='258EAFA5-E914-47DA-95CA-C5AB0DC85B11' res_key=base64.b64encode(hashlib.sha1(sec_key +MAGIC_STRING).digest())

握手完整程式碼

js 端

js 中有處理 websocket 的類,初始化後自動傳送握手包,如下:

var socket = new WebSocket('ws://localhost:3368');

Python 端

Python 用 socket 接受得到握手字串,處理後傳送

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

相關推薦

Python通過websocketjs客戶通訊示例

這裡,介紹如何使用 Python 與前端 js 進行通訊。 websocket 使用 HTTP 協議完成握手之後,不通過 HTTP 直接進行 websocket 通訊。 於是,使用 websocket 大致兩個步驟:使用 HTTP 握手,通訊。 js

[Python]通過websocketjs客戶通訊

網站大多使用HTTP協議通訊,而HTTP是無連線的協議。只有客戶端請求時,伺服器端才能發出相應的應答,HTTP請求的包也比較大,如果只是很小的資料通訊,開銷過大。於是,我們可以使用websocket這個協議,用最小的開銷實現面向連線的通訊。 這裡,介紹如何使用Python

[Python]通過websocketjsclient通信

hash csdn dsm init sel host ces elf 我們 站點大多使用HTTP協議通信。而HTTP是無連接的協議。僅僅有client請求時,server端才幹發出對應的應答。HTTP請求的包也比較大,假設僅僅是非常小的數據通信。開銷過大。於是,我們能

以太坊Go、Java、Python、Ruby、JS客戶介紹

git 跟蹤 處理 p2p 純java eth 前綴 成功 contents 作者:HPB_汪曉明(HPB Team) Go Ethereum 簡介 go-ethereum客戶端通常被稱為geth,它是個命令行界面,執行在Go上實現的完整以太坊節點。通過安裝和運行get

LINUX下socket實現伺服器客戶通訊(一)

一直對網路方面的技術比較感興趣,有時間就學習學習。雖然現在很多高階語言都已將網路程式設計部分做了封裝處理,使之使用更加方便,但是學習基礎原理,還是一個程式設計師必須要做的。 linux下的socket程式設計原理,網路上已經有大把的詳細說明,這裡不做說明,程式碼中已有簡單註釋。 具體方法,有

python通過udp協議實現客戶服務的互動

(1)服務端 建立socket 繫結目的ip和埠號、 資料互動 import socket udpSer = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #這裡的SOCK_DGRAM 為udp流 udpSe

Android手機客戶通過JSP實現Tomcat伺服器通訊(Msql資料庫,Json作為載體)--服務程式碼

伺服器端主要程式碼: 1.首先構建一個Person類,用來儲存使用者資訊 public class Person private String name; private String address; private Integer age; public P

WebSocket安卓客戶實現詳解(一)–連接建立重連

ask 應該 header oid mha 主動推送 未收到 compile tde http://blog.csdn.net/zly921112/article/details/72973054 前言 這裏特別說明下因為WebSocket服務端是公司線上項目所以這裏ur

Python全棧__服務器客戶通信、UDP協議、pycharm打印帶顏色輸出、時間同步的機制

enc bre list print bsp sock pan lis acc 1、服務器與多客戶端通信 1 import socket 2 # 創建tcp socket的套接字 3 sk = socket.socket() 4 # bind 5

WebSocket安卓客戶實現詳解(一)--連線建立重連

前言 這裡特別說明下因為WebSocket服務端是公司線上專案所以這裡url和具體協議我全部抹去了,但我會盡力給大家講明白並且demo我都是測試過,還望各位看官見諒 我們先粗獷的講下流程,掌握個大概的方向,然後在深入講解細節的實現.這裡先解答一個疑惑,為啥我們這要用WebSocket而不

Linux下網路socket程式設計——實現伺服器(select)多個客戶通訊

Linux下網路socket程式設計——實現伺服器(select)與多個客戶端通訊 置頂 2017年06月23日 14:44:37 閱讀數:3225 標籤: socket程式設計伺服器與多個客戶端通epoll多路複用C語言網路程式設計 更多

C++ 簡單的 Tcp 實現 socket 客戶客戶通訊

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

python 學習筆記_2 模擬socket程式設計 服務客戶通訊(參考核心程式設計2程式碼實現)

伺服器端程式碼實現: #!/usr/bin/env python#coding=gbk'''接收客戶端字串,在欄位串前面打上當前時間,然後返回server端採用 python2 linux下除錯執行客戶端採用python3 windows下除錯執行(注意編碼格式)''' from socket impor

TCP實現伺服器客戶通訊

TCP實現伺服器端接收客戶端傳送過來的訊息。 伺服器端: import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; p

C#伺服器客戶通訊客戶

客戶端登陸介面 先定義三個視窗級變數(全域性變數) private TcpClient client;         private NetworkStream stream;         private

java socket伺服器安卓多客戶通訊

首先我們建立服務端, public class Main { public static void main(String[] args){ //啟動socket服務 try{ final ServerSo

java多執行緒通訊(伺服器客戶

基於TCP的多執行緒通訊 伺服器執行緒: package com.netproject1; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOExc

WebSocket在服務客戶通訊demo,支援心跳檢測+斷線重連

一、為什麼需要 WebSocket? 初次接觸 WebSocket 的人,都會問同樣的問題:我們已經有了 HTTP 協議,為什麼還需要另一個協議?它能帶來什麼好處? 答案很簡單,因為 HTTP 協議有一個缺陷:通訊只能由客戶端發起。 舉例來說,我們想了解今天的天氣,只能是客戶端向伺服器發出

mosquitto1.4 websocket js客戶測試

首先先上個效果圖: 埠跟地址自己修改,可以在config.js裡面配置後再html裡面去呼叫。 html的程式碼: <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE htm

應用java多執行緒實現伺服器客戶之間的通訊

package test.concurrent.socket; import java.io.*; import java.net.Socket; /** * Created by dong on 15-6-22. * 伺服器端執行緒處理類 */ public class ServerThread