日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

nodejs python 通信_Nodejs环境实现socket通信过程解析

發布時間:2023/12/10 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nodejs python 通信_Nodejs环境实现socket通信过程解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

結構:

socket是應用層和傳輸層的橋梁。(傳輸層之上的協議所涉及的數據都是在本機處理的,并沒進入網絡中)

涉及數據:

socket所涉及的數據是報文,是明文。

作用:

建立長久鏈接,供網絡上的兩個進程通信。

nodejs環境下的簡單通信。

代碼:

serve:

// 1 引入模塊

const net = require('net');

// 2 創建服務器

let clientArr = [];

const server = net.createServer();

// 3 綁定鏈接事件

server.on('connection',(person)=>{

console.log(clientArr.length);

// 記錄鏈接的進程

person.id = clientArr.length;

clientArr.push(person);

person.setEncoding('utf8');

// 客戶socket進程綁定事件

person.on('data',(chunk)=>{

console.log(chunk);

clientArr.forEach((val)=>{

// 數據寫入全部客戶進程中

val.write(chunk);

})

})

person.on('close',(p1)=>{

clientArr[p1.id] = null;

} )

person.on('error',(p1)=>{

clientArr[p1.id] = null;

})

})

server.listen(800);

client:

// 1 引入模塊

const net = require('net');

const readline = require('readline');

// 2 創建套接字和輸入輸出命令行

let rl = readline.createInterface({

// 調用std接口

input:process.stdin,

output:process.stdout

})

let client = new net.Socket();

// 3 鏈接

client.connect(800,'localhost');

client.setEncoding('utf8');

client.on('data',(chunk)=>{

})

client.on('error',(e)=>{

console.log(e.message);

})

// 綁定輸io流事件,獲取輸入輸出字符

rl.on('line',(mes)=>{

client.write(mes);

})

小結:

server端:綁定連接事件 --> 在連接事件中管理客戶端進程對象(1,把添加到數組中 2,處理客戶端發來的數據)-->開啟端口監聽請求 。

client端:創建連接服務器用的套接字 --> 連接服務器 。

socket建立的連接是長久連接。而應用層的http協議是3次握手協議,是短連接。

socket工作原理和http類似,只是不規定斷開連接的時間??梢园裩ttp理解成一個人辦一件事情就跑一次連接流程。socket理解成只跑一次連接流程,只到把所有的事情都做完了才回去。

Socket主要作用是實現客戶端與服務端的實時通信保持通話,它不像ajax請求,每次對話完成后都會把連接斷開。Socket通信在

Node.js中實現其實很簡單,沒有想象中復雜,基本上只要懂得監聽(.on)和推送(.emit)消息,即能實現Socket通信。

Socket服務端

在服務端使用Socket,需先引入socket.io模塊,該模塊詳細文檔可參考https://socket.io/:

cnpm install socket.io

服務端實例代碼如下:

var server = app.listen(8081, "127.0.0.1", function() {

var host = server.address().address;

var port = server.address().port;

});

/********************socketIO********************/

var io = require('socket.io').listen(server);

// 建立連接

io.sockets.on('connection', function(socket) { //此處每個回調socket就是一個獨立的客戶端,通常會用一個公共列表數組統一管理

// 連接斷開,如關閉頁面時觸發

socket.on('disconnect', function() {

console.log('已斷開鏈接');

});

// 監聽客戶端發送的消息

socket.on('clientmessage', function(data) {

//推送給除自己外其他所有用戶的消息,類似于廣播

socket.broadcast.emit('message', {

text: '你的朋友上線了'

});

});

//發送給自己的消息

socket.emit('message', {

text: '你上線了'

});

});

上例中實現了4步:

1. 建立連接并添加斷開連接監聽。

2. 建立clientmessage監聽,當客戶端發來該名稱的事件時,服務器向除自己外其他的用戶廣播事件名稱為message的消息。

3.在剛建立連接時,向客戶端推送事件名稱為message的消息。

其中主要應用到的函數有5個:

.on('connection', function(socket){ }):與客戶端建立連接時監聽。

.on('disconnect', function(){ }):與客戶端斷開連接時監聽。

.on('event-name', function(data) { }):監聽客戶端發來的消息。

.broadcast.emit('event-name', { }):向除自己外的所有其他用戶廣播消息。

.emit('event-name', { }):僅向當前連接的客戶端(自己)推送消息。

(注)相關客戶端的接口關聯請往下看客戶端的例子。

Socket客戶端

客戶端實例代碼如下:

socketio測試

var tmp_html = '';

tmp_html += '

tmp_html += '

tmp_html += '

document.write(tmp_html);

document.close();

發送消息

var socket = io.connect('http://127.0.0.1:8081');

socket.on('message', function(data) {

console.log(data.text);

})

$("#btn").click(function() {

socket.emit('clientmessage', {

text: "hello"

});

});

客戶端主要應用到的函數有2個:

.on('event-name', function(data) { }):監聽服務端發來的消息。

.emit('event-name', { }):向服務端推送消息。

Socket即時通信就是那么簡單,而且在連接斷開時還會自動重連。還有一種實現方法就是使用net模塊的套接字,可以直接查看Node.js文檔。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的nodejs python 通信_Nodejs环境实现socket通信过程解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。