亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 Socket IO 和 aiohttp 進行節點 JS 和 Python 之間的數據傳輸

使用 Socket IO 和 aiohttp 進行節點 JS 和 Python 之間的數據傳輸

蝴蝶不菲 2022-01-18 15:33:15
我的總體目標是在 JavaScript 文件(使用節點運行)中生成隨機數流,并以異步時間間隔將它們發送到 python 腳本。一旦數字在 python 中,腳本將確定數字是否是偶數。如果是,則將數字發送回 JavaScript 文件。我的主要關注點是獲取 JavaScript 和 Python 之間的通信。一旦我啟動 JavaScript 文件和 python 服務器,它們將繼續運行,直到我停止它們。目前,我一直在學習位于此處(https://tutorialedge.net/python/python-socket-io-tutorial/)的教程。本教程使用 JS 的 socket io 和 python 的 aiohttp。我將 html 代碼操作為 JS 代碼(index.js),如下所示:// index.js    var socket = require('socket.io-client')('http://localhost:8080');socket.on('connect', function(){});function generateNumber() {   let n = Math.floor(Math.random() * 50);   let json = {       'number': n   }   console.log(json);   return json;}(function loop() {    var rand = Math.round(Math.random() * (3000 - 500)) + 500;    setTimeout(function() {            generateNumber();            loop();      }, rand);}());function sendMsg() {  socket.emit("message", generateNumber());}socket.on("message", function(data) {console.log(data);});我創建了一個函數 (generateNumber) 來生成以 JSON 格式輸出的隨機數。我使用 JSON 是因為我相信當數字到達 python 腳本時,它可以輕松地將數據轉換為列表和整數。循環函數允許以隨機間隔連續創建數字,并取自這里:Randomize setInterval (How to rewrite same random after random interval)下面顯示的 python 服務器(server.py)取自教程(https://tutorialedge.net/python/python-socket-io-tutorial/):# server.pyfrom aiohttp import webimport socketio# creates a new Async Socket IO Serversio = socketio.AsyncServer()# Creates a new Aiohttp Web Applicationapp = web.Application()# Binds our Socket.IO server to our Web App# instancesio.attach(app)# we can define aiohttp endpoints just as we normally# would with no changeasync def index(request):    with open('index.html') as f:        return web.Response(text=f.read(), content_type='text/html')
查看完整描述

1 回答

?
白衣非少年

TA貢獻1155條經驗 獲得超0個贊

我相信,在 JS 部分,您應該在某處調用 sendMsg() 以發出消息。


更新


const io = require('socket.io-client');


const socket = io('http://localhost:8080');


socket.on('message', data => {

  console.log('Got from server: ');

  console.log(data);

});


function generateNumber() {

  const n = Math.floor(Math.random() * 50);

  return { number: n };

}


function sendMsg() {

  const json = generateNumber();

  console.log('Sending to server:');

  console.log(json);


  socket.emit('message', json);

}


function loop() {

  const rand = Math.round(Math.random() * (3000 - 500)) + 500;

  console.log(`Setting timeout ${rand}ms`);

  setTimeout(() => {

    sendMsg();

    loop();

  }, rand);

}


socket.on('connect', () => {

  console.log('Connected to server');

  loop();

});


我在兩邊都使用節點。服務器端只是發回每條收到的消息。日志如下所示:


Connected to server

Setting timeout 1685ms

Sending to server:

{ number: 21 }

Setting timeout 1428ms

Got from server: 

{ number: 21 }

Sending to server:

{ number: 40 }

Setting timeout 2955ms

Got from server: 

{ number: 40 }


查看完整回答
反對 回復 2022-01-18
  • 1 回答
  • 0 關注
  • 222 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號